取消后台工作操作

时间:2015-07-12 10:41:57

标签: c# winforms backgroundworker cancellation ms-solver-foundation

我在最近的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()方法?

1 个答案:

答案 0 :(得分:0)

后台进程应检查

CancellationPending 属性。如果该属性设置为true,那么你的后台工作者应该停止它的工作,释放资源,做最后的事情等等。但是因为你无法控制 ScheduleUsingMSF(); 你想要能够从中受益。