Lea*_*ner 8 c# wpf task-parallel-library
在我的WPF应用程序中,我Dispatcher.BeginInvoke在构造函数中使用加载内容.我的问题是它会阻止UI线程吗?
或者是否更好地使用Task.Factory.StartNew然后在UI上调度回来,以便无论加载内容处理时间如何,应用程序都将首先加载?
哪种方法更好,为什么?
Bro*_*ass 22
他们做了两件截然不同的事:
Task.Factory.StartNew调度委托以在线程池线程上执行.当前线程继续运行而不等待此任务的结果(异步).通常,您会生成一个运行时间较长的后台任务,以便UI不会被阻塞太长时间(而不是"冻结").
Dispatcher.BeginInvoke调度委托以在调度程序(UI)线程上执行.通常,这是为了使用在后台线程上执行的某些操作的结果来更新某些UI控件.基本上你在这里更新UI.
直接回答你的问题:
您不应该在Dispatcher线程上安排冗长的操作,通常您只想在此处更新UI控件.委托中的代码将在UI线程上执行,该线程在执行时被阻止.只需Thread.Sleep(10000)在您当前的代码中(您从构造函数中安排),您将看到UI将冻结.使用后台任务 - 使用Task或后台工作程序(两者都将使用线程池线程).
或者最好使用Task.Factory.StartNew然后在UI上调度回来,以便无论加载内容处理时间如何,应用程序都将首先加载.
是!
| 归档时间: |
|
| 查看次数: |
5449 次 |
| 最近记录: |