Dispatcher.Invoke可以在执行该方法之前返回吗?

时间:2018-06-21 06:45:54

标签: c# wpf multithreading dispatcher

我正在调试一个奇怪的错误,其中一个工作线程正在向主线程调度几种方法:例如

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吗?

0 个答案:

没有答案