什麼是在一個C#程序中創建一個「取消」事件的最有效方法,該程序正在一個單獨的線程上處理一個循環中的大量數據集?有效取消數字處理線程的事件實現?
現在,我只是簡單地使用從我的UI線程觸發的cancel事件,該事件隨後在數字運算線程上調用「onCancel」函數。該取消函數將變量設置爲「真」,緊縮回路定期檢查該變量,例如,
Class Cruncher {
private bool cancel = false;
public cruncher()
{
crunch();
}
private void crunch()
{
while(conditions AND !cancel) { crunch; }
dispose_resources;
}
private void onCancel()
{
cancel = true;
}
}
雖然我沒有檢查經常取消變量作爲我的榜樣以上(而不是實際執行不取消),我還是想優化這個緊縮方法儘可能。任何更有效地完成這個例子的例子都會很好看。
在非常緊密的循環中,我通過僅檢查每100或1000次迭代而不是每次迭代來進行優化。但你必須檢查。 – 2010-08-05 22:04:31