我正在调试一个奇怪的错误,其中一个工作线程正在向主线程调度几种方法:例如
private void WokerThread()
{
var dispatcher = Application.Current.Dispatcher;
while (true) {
Property1 = new Stuff();
Property2 = new Stuff();
Property3 = new Stuff();
Property4 = new Stuff();
dispatcher.Invoke(() => OnPropertyChanged("Property1")); // method1
dispatcher.Invoke(() => OnPropertyChanged("Property2"));
dispatcher.Invoke(() => OnPropertyChanged("Property3"));
dispatcher.Invoke(() => OnPropertyChanged("Property4")); // method4
// Some sleep goes here
}
}
一切正常,除非绑定到GUI控件的某个数据结构变得巨大,然后在渲染时GUI线程开始变慢一点。
在这种情况下,我发现WorkerThread
等待method1
返回,而主线程在尝试执行method4
时崩溃了。崩溃是因为该实例中的某些数据尚未准备就绪,这不是我们的问题。
问题是:如果GUI线程繁忙,行method4
返回并WorkerThread
是否可以在执行该方法之前继续执行?
这就是为什么我发现在method4
等待WorkerThread
返回的同时执行method1
的GUI吗?