簡體   English   中英

任務。運行引發事件的方法

[英]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.

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