微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# async await 异步执行方法封装 替代 BackgroundWorker

BackWork代码

using System;
 System.Collections.Generic;
 System.Linq;
 System.Text;
 System.Threading.Tasks;

namespace Utils
{
    public class BackWork
    {
        static void RunAsync(Action action,Action complete = null,Action<Exception> errorAction = null)
        {
            RunAsync((obj) => action(),,complete,errorAction);
        }

        async void RunAsync(Action<object> action,1)">object arg = )
        {
            Exception exception = ;

            Task task = Task.Run(() =>
            {
                try
                {
                    action(arg);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
            });
            await task;

            if (exception == )
            {
                if (complete != )
                {
                    
                    {
                        complete();
                    }
                     (Exception ex)
                    {
                        if (errorAction != )
                        {
                            errorAction(ex);
                        }
                    }
                }
            }
            else)
                {
                    errorAction(exception);
                }
            }
        }
    }
}
View Code

测试代码

private void button1_Click(object sender,EventArgs e)
{
    textBox1.Text = string.Empty;
    textBox1.AppendText("开始\r\n");

    for (int i = 0; i < 10; i++)
    {
        string str = .Empty;
        int k = 0;

        BackWork.RunAsync((obj) =>
        {
            str = i=" + obj + \r\n;
            k = (int)obj;
        },i,() =>
        {
            textBox1.AppendText(str);

            BackWork.RunAsync(() =>
            {
                str = " + i + " + k + ;
            },1)">
            {
                textBox1.AppendText(str);
            },(ex) =>
            {
                textBox1.AppendText(错误" + ex.Message + );
            });


        },1)">
        {
            textBox1.AppendText();
        });
    }
}
View Code

测试截图:

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐