[英]Asynchronous Thread Lifetime & WPF UI Update
在按鈕上單擊,我已經激發了對StartContinuousThread
調用,該調用持續StartContinuousThread
輪詢一次服務器。
public class ThreadsWindow
{
CancellationTokenSource wtoken = new CancellationTokenSource();
private void btnStartTest_Click(object sender, RoutedEventArgs e)
{
StartContinuousThread();
}
void StartContinuousThread()
{
while(true)
{
var fact = Task.Factory.StartNew(() =>
{
CallServer();
Task.Delay(1000, wtoken.Token);
},
wtoken.Token);
}
}
}
StartContinuousThread
開始執行,但是btnStartTest_Click event handler
完成了執行。
在這種情況下,
StartContinuousThread method
將如何更新UI?我不知道
StartContinuousThread
是否也用事件處理程序終止了,因為沒有等待重新連接的關鍵字。
請幫忙!
如果您的目標是每秒輪詢服務器,那么您會遇到很多問題。
沒有循環。 您執行一次該方法,然后停止。
您使用Delay
創建任務,然后將其忽略。 您應該創建該任務的延續,以完成其余工作,實際上一秒鍾不做任何事情。
這是解決這些問題的實現:
private async Task StartContinuousThread(CancellationToken token)
{
while (true)
{
token.ThrowIfCancellationRequested();
await Task.Run(() => CallServer());
await Task.Delay(1000, token);
}
}
另一種可能性,特別是如果您使用的是較舊版本的C#,則是使用計時器每秒運行一些代碼。
至於更新UI; 您可以在Task.Run
之外的任何地方自由地執行此操作。 在您的示例中,您需要使用某種機制將其編組回UI線程,例如捕獲UI的同步上下文並將其發布到其中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.