我有一個工作線程通過引發事件來報告進度。等待事件提升線程取消
private volatile bool canRun;
public void Run()
{
for (int i = 0; i < count && canRun; i++)
{
// do stuff
OnProgressMade((float)i/(float)count);
}
OnWorkFinished();
}
public void Cancel()
{
canRun = false;
// wait for the thread to finish
}
在Cancel
方法中,我想等待線程完成。否則,有人可能會呼叫Cancel
,然後立即Dispose
,而線程仍在「做東西」。如果我使用Join
,則可能存在死鎖 - UI等待線程取消,線程將等待UI處理ProgressMade
事件。
有沒有辦法很好地解決這個問題,還是從一開始就是糟糕的設計?我當前的解決方案依賴於在處理工作人員之前等待WorkFinished
事件的UI。
你使用的是什麼C#版本?等待這不是很難做到。 – usr
爲什麼不加入取消方法? – Vadim
我想我沒有趕上你的漂移。如果你調用'Cancel',那麼它將退出循環,但仍然調用'OnWorkFinished'。你不想處置什麼? –