这个问题在这里已有答案:
我有一个阻塞UI线程的CPU密集型任务,经过调查我发现问题的根源似乎是在Dispatcher线程中实际运行的Task.Run:
Task.Run(() =>
{
if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread)
{
// breakpoint
}
});
在if语句中放置断点会被命中。
这是预期的行为吗?我理解Task.Run使用不同的线程。
如果使用默认任务调度程序(默认情况下),则传递给Task.Run
的操作将在线程池线程上执行。
这应该给你预期的结果:
Task.Run(() =>
{
if (System.Windows.Application.Current.Dispatcher.Thread == Thread.CurrentThread)
{
// breakpoint not hit in WPF...
}
});
System.Windows.Application.Current.Dispatcher
和System.Windows.Threading.Dispatcher.CurrentDispatcher
之间的区别是:
Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher