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()メソッドを制御できないため、時間がかかります)、BackgroundWorkerGUIのフリーズを防ぐためにスケジューリングメソッドを呼び出すために使用しました。

スケジューリング プロセスに時間がかかる場合、ユーザーは現在のスケジューリング操作をキャンセルしてパラメーターを変更し、再度実行したい場合があるため、キャンセル メカニズムを提供したいので、次のコードを使用して、方法に従って操作をキャンセルしました。バックグラウンド ワーカー:

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