我在窗口中的更新值出现问题,该问题是通过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
时,进度条不会更新。带进度条的窗口是否可能使用除主线程之外的其他线程?
如何更新此值?
答案 0 :(得分:0)
根据您的描述我的猜测是,您希望在主应用程序线程忙于执行某些操作时刷新UI。主应用程序线程是UI线程,因此如果是这种情况,则会阻止UI线程。
您需要做的是移动正在执行加载等的“程序”部分并将进度值更新为工作线程(请参阅ThreadPool),当您想要通知UI刷新时使用Dispatcher。你找到的BeginInvolke()示例。这将在主UI线程上执行刷新代码。