Task.Run()

时间:2016-01-29 20:39:46

标签: c#

目前我的代码变得非常重复。我必须在整个软件中反复提高繁忙指标。

这三个动作是

1. Raise Busy Indicator
2. Do the actions
3. Turn Off Busy Indicator

实施例

public async void OpenAttachment()
{
    Events.PublishOnUIThread(new BusyEvent { IsBusy = true });
    await Task.Run(() =>
    {
        try
        {
            if (SelectedAttachment == null)
            {
                return;
            }

            var tempFile = string.Format(
                "{0}\\{1}.{2}", Path.GetTempPath(), SelectedAttachment.FileName, SelectedAttachment.FileExtension);

            System.IO.File.WriteAllBytes(tempFile, UnitOfWork.FileRepository.GetFileBytes(SelectedAttachment.Id));

            Process.Start(tempFile);
        }
        catch (Exception ex)
        {
            Notification.Error("Person - Opening attachment", "File couldn't open, please close last file instance.");
        }
    });
    Events.PublishOnUIThread(new BusyEvent { IsBusy = false });
}

我正在寻找一种方法,这样它就可以执行繁忙的指标,而不必每次都重复它。

这样的东西
public async void OpenAttachment()
{
    Execute(() => await Task.Run(() => {....TaskWork});
}

想知道是否有人可以提供有关如何减少此重复代码的提示。

1 个答案:

答案 0 :(得分:8)

你的意思是这样的吗?

public async Task RunBusyTask(Action task)
{
    Events.PublishOnUIThread(new BusyEvent { IsBusy = true });
    await Task.Run(task);
    Events.PublishOnUIThread(new BusyEvent { IsBusy = false });
}
RunBusyTask(() => {...});