当前调度程序工作时多线程MVVM更新值

时间:2012-10-01 15:50:51

标签: wpf multithreading mvvm binding

我在窗口中的更新值出现问题,该问题是通过Show()方法而不是ShowDialog()方法打开的。我使用MVVM并使用绑定:

Value="{Binding Path=MainProgressValue, UpdateSourceTrigger=PropertyChanged}"

在我的属性中,我使用INotifyPropertyChanged作为通知UI。

它工作正常,但现在我打开新窗口

 window.DataContext = context;
 if (owner != null)
       window.Owner = owner;
 resultHandler = new ViewModelBaseClass.ResultHandler(context_RequestClosing);
 getDialogResultHandler = new ViewModelBaseClass.GetDialogResultHandler(context_GetDialogResultAction);
 context.RequestClosing += resultHandler;
 context.GetDialogResult += getDialogResultHandler;
 window.Show();

有进度条。显示窗口,主线程继续进行程序。但是当DataContext调用RaisePropertyChanged时,进度条不会更新。带进度条的窗口是否可能使用除主线程之外的其他线程?

如何更新此值?

1 个答案:

答案 0 :(得分:0)

根据您的描述我的猜测是,您希望在主应用程序线程忙于执行某些操作时刷新UI。主应用程序线程是UI线程,因此如果是这种情况,则会阻止UI线程。

您需要做的是移动正在执行加载等的“程序”部分并将进度值更新为工作线程(请参阅ThreadPool),当您想要通知UI刷新时使用Dispatcher。你找到的BeginInvolke()示例。这将在主UI线程上执行刷新代码。