[英]Task.Run a method who raise events
在用WPF和C#編寫的Windows Store應用程序中,我需要啟動一個異步方法,該方法從文件中收集信息。 但是我希望它在UI響應用戶交互時在后台運行。 所以,我這樣做:
Task x = Task.Run(async () => await Method());
問題是,“方法”必須向用戶界面發出更改通知。 如您所料,它崩潰是因為引發事件的方法不在UI線程中。
所以,我這樣做:
TaskScheduler t = TaskScheduler.FromCurrentSynchronisationContext();
Task x = Task.Run(() => {}).ContinueWith(async _ => await Method(), t);
我的問題是,由於我必須指定一個同步上下文,並且由於無法在Run方法中指定它,因此有沒有辦法執行以下操作:
TaskScheduler t = TaskScheduler.FromCurrentSynchronisationContext();
Task x = Task.ContinueWith(async _ => await Method(), t);
或者,如果您有其他建議可以使它起作用,則歡迎您。
謝謝。
您根本不需要啟動新Task
。 您可以簡單地await Method()
而無需在使用了ThreadPool thrrad的Task
上使用ContinueWith
。.當您await
異步方法時,它將同步運行,直到遇到第一個await
並返回到調用方法為止,這將使您UI響應
你可以簡單地
await Method();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.