我在最近的Microsoft Solver Foundation
项目中使用WinForms
来解决调度问题。
我的调度方法是这样的:
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冻结的调度方法。
当调度过程花费很长时间时,用户可能想要取消当前的调度操作并更改其参数并再次运行它,所以我想为它们提供一个取消机制,所以我使用以下代码来取消{{{ 3}}:
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()
方法?
答案 0 :(得分:0)
CancellationPending 属性。如果该属性设置为true,那么你的后台工作者应该停止它的工作,释放资源,做最后的事情等等。但是因为你无法控制 ScheduleUsingMSF(); 你想要能够从中受益。