Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务。运行不是在后台运行,而是在调度程序上运行_C#_Wpf_Task Parallel Library - Fatal编程技术网

C# 任务。运行不是在后台运行,而是在调度程序上运行

C# 任务。运行不是在后台运行,而是在调度程序上运行,c#,wpf,task-parallel-library,C#,Wpf,Task Parallel Library,我有一个CPU密集型任务阻塞了UI线程,在调查之后,我发现问题的根源似乎是任务。实际运行在Dispatcher线程中: Task.Run(() => { if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread) { // breakpoint } }); 在命中if语句时在其中放置断点 这是预期的行为吗?我了解任务。运行以使用不同的线程。如果使用默认任务调度程序(默认情况下是这

我有一个CPU密集型任务阻塞了UI线程,在调查之后,我发现问题的根源似乎是任务。实际运行在Dispatcher线程中:

Task.Run(() =>
{
    if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread)
    {
        // breakpoint
    }
});
在命中if语句时在其中放置断点


这是预期的行为吗?我了解任务。运行以使用不同的线程。

如果使用默认任务调度程序(默认情况下是这样),则传递给任务的操作。运行将在线程池线程上执行

这将为您提供预期的结果:

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
之间存在差异:


我知道我一定做了些蠢事。谢谢