[英]How to Start/Stop/Wait for a Thread
我正在將一些C#.Net代碼移植到WinRT,我無法確定如何替換以下內容:
bool threadDone = false;
Thread updateThread = null;
void StartUpdateThread() {
threadDone = false;
updateThread = new Thread(new ThreadStart(SendUpdateThread));
updateThread.Start();
}
void StopUpdateThread() {
if (updateThread == null) return;
threadDone = true;
updateThread.Join();
updateThread = null;
}
void SendUpdateThread() {
while(!threadDone) {
...
Thread.Sleep(...);
}
}
在WinRT中替換它的最佳方法是什么。 我已經看過ThreadPool.RunAsync(...)來啟動代碼運行,但我不確定最好等待它停止並等待它在StopUpdateThread中完成。 另外,我在我的線程函數中用什么替換睡眠?
由於我們討論的是C#5 GUI應用程序,如果你沒有阻塞任何東西並且使用了Task
和async
,那么最好是await
。 這可能看起來像這樣:
// I think this field needs to be volatile even in your version
volatile bool taskDone = false;
Task updateTask = null;
void StartUpdateTask() {
taskDone = false;
updateTask = Task.Run(SendUpdateTask);
}
async Task StopUpdateTask() {
if (updateTask == null) return;
taskDone = true;
await updateTask;
updateTask = null;
}
async Task SendUpdateTask() {
while (!taskDone) {
...
await Task.Delay(…);
}
}
但是要正確使用這段代碼,你實際上需要了解async
- await
是什么,所以你應該讀一下。
此外,這可能不是您所需要的,但僅根據您問題中的信息很難知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.