小编典典

在WPF应用程序中在后台执行任务

c#

private void Start(object sender, RoutedEventArgs e)
{
    int progress = 0;
    for (;;)
    {
        System.Threading.Thread.Sleep(1);
        progress++;
        Logger.Info(progress);
    }
}

什么是如果我想推荐的方法(TAP或TPL或BackgroundWorker的或发货或其他人)Start()

  1. 不阻止UI线程
  2. 提供进度报告
  3. 可取消
  4. 支持多线程

阅读 1064

收藏
2020-05-19

共1个答案

小编典典

使用.NET 4.5(或.NET 4.0 +
Microsoft.Bcl.Async),最好的方法是使用Task基于API和的API
async/await。它允许使用方便的(伪)顺序代码工作流程,并具有结构化的异常处理。

例:

private async void Start(object sender, RoutedEventArgs e)
{
    try
    {
        await Task.Run(() =>
        {
            int progress = 0;
            for (; ; )
            {
                System.Threading.Thread.Sleep(1);
                progress++;
                Logger.Info(progress);
            }
        });
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

更多阅读:

如何在WPF后台执行任务同时提供报告并允许取消?

4.5中的Async:在Async
API中启用进度和取消

异步并等待

异步/等待常见问题解答

2020-05-19