簡體   English   中英

回到異步回調方法中的ui線程

[英]Get back to ui thread in async callback method

我正在將越來越多的代碼遷移到異步/等待狀態,並且大多數情況下運行順利。

但是有時我會遇到以下情況,並且不確定使用異步/等待模式是多么“簡單”:

    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();

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

在您的代碼中包括SynchronizationContextAwaiter。

您的代碼中的某個地方在syncContext變量中捕獲了GUI上下文,該變量應該對事件處理程序可用。

在事件處理程序中,執行

await syncContext;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM