3
我在我最近的WinForms
項目中使用Microsoft Solver Foundation
來解決調度問題。取消backgroundworker操作
我的調度方法是這樣的:
public class Scheduler
{
public void Schedule()
{
InitializeParameters();
PrepareDateFromDatabase();
ScheduleUsingMSF(); //<---- this line is black box and take a long time to execute
SaveSchedulingResultToDb();
}
}
有時候調度過程需要較長的時間(我沒有關於它的任何控制,需要很長時間ScheduleUsingMSF()方法),我用一個BackgroundWorker
來調用我的調度方法來防止GUI凍結。
當調度過程需要很長時間時,用戶可能想要取消當前的調度操作並更改它們的參數並再次運行它,所以我想爲它們提供取消機制,因此我使用以下代碼取消操作,依據How to: Use a Background Worker :
bw.WorkerSupportsCancellation = true;
...
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
var scheduler = new Scheduler();
scheduler.Schedule();
}
private void buttonCancel_Click(object sender, RoutedEventArgs e)
{
if (bw.WorkerSupportsCancellation == true)
{
bw.CancelAsync();
}
}
在哪裏,我應該怎麼檢查if ((bw.CancellationPending == true))
取消Schedule()
方法?
有一個骯髒的黑客張貼在這個杜佩鏈接:[如何「完全殺死」後臺工作?](http://stackoverflow.com/questions/800767/how-to-kill-background-worker-completely) –
那當然是不行的。如果你不能闖入那個黑匣子,那麼你無法解決這個問題。使用電話,談論ISolverParameters.QueryAbort –
@HansPassant:謝謝,我搜索了'ISolverParameters.QueryAbort',但沒有找到任何有用的東西,你有什麼關於'ISolverParameters.QueryAbort'的示例或其他? – Masoud