c# - UI 线程上的任务延续

标签 c# .net wpf multithreading task

是否有一种“标准”方式来指定任务延续应该在创建初始任务的线程上运行?

目前我有下面的代码 - 它正在运行,但跟踪调度程序并创建第二个 Action 似乎是不必要的开销。

dispatcher = Dispatcher.CurrentDispatcher;
Task task = Task.Factory.StartNew(() =>
{
    DoLongRunningWork();
});

Task UITask= task.ContinueWith(() =>
{
    dispatcher.Invoke(new Action(() =>
    {
        this.TextBlock1.Text = "Complete"; 
    }
});

最佳答案

使用 TaskScheduler.FromCurrentSynchronizationContext() 调用延续:

    Task UITask= task.ContinueWith(() =>
    {
     this.TextBlock1.Text = "Complete"; 
    }, TaskScheduler.FromCurrentSynchronizationContext());

这仅适用于当前执行上下文在 UI 线程上的情况。

关于c# - UI 线程上的任务延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331262/

相关文章:

c# - 使用 COM UPnP 库注册设备/服务

c# - 返回默认值。 (C#)

c# - 如何在 C# 中移动 PictureBox?

c# - Automapper项目使用

c# - 如何将数据从主窗口传递到主窗口内的用户控件?

wpf - 为什么在即时更改数据时我的MVVM不起作用?

c# - 在应用程序中编写诊断类是否常见

c# - visual c# 2010 的 SQLite 安装问题

c# - 在控制台应用程序中等待异步操作结束时,如何避免出现 Thread.Sleep(Int32.MaxValue)?

c# - 选择 ListView 项时填充文本框