我正在将越来越多的代码迁移到异步/等待,而且大部分时间都在顺利进行。
然而,有时我会遇到以下情况,我不确定它是如何“意味着”使用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();
答案 0 :(得分:0)
您可以使用https://www.thomaslevesque.com/2015/11/11/explicitly-switch-to-the-ui-thread-in-an-async-method/
中说明的技巧将SynchronizationContextAwaiter包含在您的代码中。
代码中的某处捕获syncContext变量中的GUI上下文,该变量应该可用于您的事件处理程序。
在事件处理程序中,执行
await syncContext;