VS无法正常加载Wpf后台刷新ui的自定义控件

来源:互联网 发布:上海知金教育 编辑:程序博客网 时间:2024/05/20 02:29

今天,在用wpf制作一个UserControl被其他控件加载调用时遇到了一个问题,现在分享出来,给以后遇到这个问题的人解惑。
问题:就是这里使用了一个自定义控件,该控件中在Load函数采用了后台线程Backgroundworker来刷新UI控件中的数据。具体的代码如下所示:

public partial class ParameterConfig_Alarm : UserControl{     public ParameterConfig_Alarm()     {        InitializeComponent();        backgroundworker1 = new BackgroundWorker();        backgroundworker1.DoWork += backgroundworker1_DoWork;     }           private void backgroundworker1_DoWork(object sender,DoWorkEventArgs e)   {   //就是这条语句采用了从XML文件的数据来刷新控件数据,这是带参数的方式      alarmFilter1.Dispatcher.Invoke(new Action<string>((string s) => { alarmFilter1.setAlarmlevel(XmlConfig.GetAppConfig(s)); }));  //就是这条语句采用了从XML文件的数据来刷新控件数据,这是不带参数的方式      alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.setAlarmType(XmlConfig.GetAppConfig("UPLD_FILTER_ALMTYPE")); }));     alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.InsertFilterID(XmlConfig.GetAppConfig("UPLD_FILTER_ALMID")); }));     alarmFilter1.Dispatcher.Invoke(new Action(() => { alarmFilter1.InsertFilterCode(XmlConfig.GetAppConfig("UPLD_FILTER_ALMCODE")); }));     m_setAlmCountColor();               }   private void ParameterConfig_Warn_Load(object sender, RoutedEventArgs e)   {                backgroundworker1.RunWorkerAsync();   }}

就是上面的这个控件在下面的控件来调用其的时候,会出现无法加载的情况,具体的控件调用XAML代码,如下:

<Controls:MetroWindow x:Class="INMS.MainWindow"        xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"        xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"        xmlns:local="clr-namespace:INMS"        Title="集中网管服务端" Height="1085" Width="1920" WindowState="Maximized">        <Grid>        <local:ParameterConfig_Alarm />        </Grid>

在Grid中调用该UserCOntrol,虽然可以正常运行,但是在动态对页面进行显示的时候,会出现下图所示的问题:
这里写图片描述
这里主要导致的原因是用户控件中的
alarmFilter1.Dispatcher.Invoke(new Action<string>((string s) => { alarmFilter1.setAlarmlevel(XmlConfig.GetAppConfig(s)); }));

中采用了参数的缘故。
虽然不会导致无法运行,但是会影响后面的设计。具体是什么原因导致的,容我三思。

0 0
原创粉丝点击