1

私たちのアプリケーションでは、TPL を使用して、サービス呼び出しを行うたびにタスクを作成します。タスクが開始されるたびに true に設定され、タスクが完了または失敗するたびにクリアされるビジー インジケーターがあります。方法はありますか?作成されたすべてのタスクに対してこれを行うのではなく、一般的な方法でこれを達成しますか?

最初のインスタンス:

        ComponentViewModel.Instance.IsApplicationBusy = true;
        ComponentViewModel.Instance.BusyMessage = "Loading...";

        var task1 = Task.Factory.StartNew(() => DoTask1());
        task1.ContinueWith(antecdent =>
        {
            ComponentViewModel.Instance.IsApplicationBusy = false;
            CustomAction1();
        }

2 番目のインスタンス:

        ComponentViewModel.Instance.IsApplicationBusy = true;
        ComponentViewModel.Instance.BusyMessage = "Loading...";

        var task2 = Task.Factory.StartNew(() => DoTask2());
        task2.ContinueWith(antecdent =>
        {
            ComponentViewModel.Instance.IsApplicationBusy = false;
            CustomAction2();
        }

サービス呼び出しが行われるたびに、アプリケーション全体でロジックが繰り返されます。この繰り返しを回避する方法はありますか?

たとえば、すべてのドラッグ操作に対して発生する dragstarted および dragcompleted イベントがあるため、タスク ファクトリを拡張するか、または別の方法で taskstarted および taskcompleted イベントを発生させることができます。

編集:質問がより明確になるように変更を加えました。タスクを開始および終了する前の手順は同じですが、完了まで実行するときにタスクごとに異なる機能を実行する必要があることがわかります

4

1 に答える 1

0

編集:私は質問を誤解したようです。一元化された機能としてこの「開始、待機、続行」を作成することは良い動きであり、次のように作成できます。

public void DoIt(Action ThingToDo) {
    ComponentViewModel.Instance.IsApplicationBusy = true;
    ComponentViewModel.Instance.BusyMessage = "Loading...";

    var loadProviderTask = Task.Factory.StartNew(ThingToDo);
    loadProviderTask.ContinueWith(antecdent =>
    {
        ComponentViewModel.Instance.IsApplicationBusy = false;
    }
}
于 2012-05-06T02:37:45.757 に答える