围绕由TPL创建的新任务的操作前后集中

时间:2012-05-06 02:35:36

标签: c# wpf task-parallel-library busyindicator

在我们的应用程序中,每当我们想要进行服务调用时,我们都会使用TPL来创建任务。我们有一个忙碌指示器,只要任务启动并在任务完成或出现故障时清除,它就会设置为true。以通用方式完成此任务的任何方式,而不是为每个创建的任务执行此操作?

第一个例子:

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

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

第二个例子:

        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事件吗?

编辑:进行更改以使问题更加清晰。您现在可以在开始和结束任务之前观察到相同的步骤,但是当每个任务运行完成时需要执行不同的功能

1 个答案:

答案 0 :(得分: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;
    }
}