在异步回调方法中返回ui线程

时间:2017-09-28 07:30:00

标签: c# .net multithreading asynchronous async-await

我正在将越来越多的代码迁移到异步/等待,而且大部分时间都在顺利进行。

然而,有时我会遇到以下情况,我不确定它是如何“意味着”使用async / await模式:

    private async void My_EventHandler(object sender, Event ev)
    {
        // This event is raised by a background worker thread
        // Somehow we need to go back to ui thread here
        NotifyPropertyChange(Busy); // Or any other method that should run on ui thread
        await processEventAsync(ev);
        NotifyPropertyChange(Busy);
    }

目前我在这些情况下使用异步lambda进行显式Dispatcher / Invoke,但考虑到async / await的其他一切是否干净似乎很脏。

所以我想问题是,C#中有这样的东西吗?

await SwitchToUIThread();

1 个答案:

答案 0 :(得分:0)

您可以使用https://www.thomaslevesque.com/2015/11/11/explicitly-switch-to-the-ui-thread-in-an-async-method/

中说明的技巧

将SynchronizationContextAwaiter包含在您的代码中。

代码中的某处捕获syncContext变量中的GUI上下文,该变量应该可用于您的事件处理程序。

在事件处理程序中,执行

await syncContext;