在 WPF 应用程序的后台执行任务 [英] Execute task in background in WPF application

查看:41
本文介绍了在 WPF 应用程序的后台执行任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

示例

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

如果我想让 Start()

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

推荐答案

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

With .NET 4.5 (or .NET 4.0 + Microsoft.Bcl.Async), the best way is to use Task-based API and async/await. It allows to use the convenient (pseudo-)sequential code workflow and have structured exception handling.

示例:

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 中的异步:在异步 API 中启用进度和取消.

异步和等待.

异步/等待常见问题解答.

这篇关于在 WPF 应用程序的后台执行任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆