我最近在我的WinForms
项目中使用Microsoft Solver Foundation
来解决一个调度问题。
我的调度方法大致如下:
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冻结。
当调度过程需要很长时间时,用户可能希望取消当前调度操作并更改参数后重新运行,因此我想要为他们提供取消机制,因此我使用以下代码根据如何使用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()
方法?
ISolverParameters.QueryAbort
的内容但没有找到任何有用的信息,你是否有关于ISolverParameters.QueryAbort
的示例或其他资料? - Masoud