3

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 冻结。

当一个调度过程需要很长时间时,用户可能想取消当前的调度操作并更改他们的参数并再次运行它,所以我想为他们提供一个取消机制,所以我使用以下代码根据如何取消操作:使用后台工作者

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()方法?

4

1 回答 1

0

CancellationPending属性应由后台进程检查。如果该属性设置为 true,那么您的后台工作人员应该停止其工作、释放资源、做最后的事情等。但是由于您无法控制ScheduleUsingMSF(); 你希望能够从中受益。

于 2015-07-12T10:48:39.760 回答