代码之家  ›  专栏  ›  技术社区  ›  Joe

任务。运行不是在后台运行,而是在Dispatcher上运行[duplicate]

  •  -1
  • Joe  · 技术社区  · 6 年前

    Task.Run(() =>
    {
        if (Dispatcher.CurrentDispatcher.Thread == Thread.CurrentThread)
        {
            // breakpoint
        }
    });
    

    在if语句中放置断点。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    你传递给 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