zoukankan      html  css  js  c++  java
  • C# async await 异步执行方法封装 替代 BackgroundWorker

    BackWork代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Utils
    {
        public class BackWork
        {
            public static void RunAsync(Action action, Action complete = null, Action<Exception> errorAction = null)
            {
                RunAsync((obj) => action(), null, complete, errorAction);
            }
    
            public static async void RunAsync(Action<object> action, object arg = null, Action complete = null, Action<Exception> errorAction = null)
            {
                Exception exception = null;
    
                Task task = Task.Run(() =>
                {
                    try
                    {
                        action(arg);
                    }
                    catch (Exception ex)
                    {
                        exception = ex;
                    }
                });
                await task;
    
                if (exception == null)
                {
                    if (complete != null)
                    {
                        try
                        {
                            complete();
                        }
                        catch (Exception ex)
                        {
                            if (errorAction != null)
                            {
                                errorAction(ex);
                            }
                        }
                    }
                }
                else
                {
                    if (errorAction != null)
                    {
                        errorAction(exception);
                    }
                }
            }
        }
    }
    View Code

    测试代码:

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = string.Empty;
        textBox1.AppendText("开始
    ");
    
        for (int i = 0; i < 10; i++)
        {
            string str = string.Empty;
            int k = 0;
    
            BackWork.RunAsync((obj) =>
            {
                str = "i=" + obj + "
    ";
                k = (int)obj;
            }, i, () =>
            {
                textBox1.AppendText(str);
    
                BackWork.RunAsync(() =>
                {
                    str = "i=" + i + ", k=" + k + "
    ";
                }, () =>
                {
                    textBox1.AppendText(str);
                }, (ex) =>
                {
                    textBox1.AppendText("错误:" + ex.Message + "
    ");
                });
    
    
            }, (ex) =>
            {
                textBox1.AppendText("错误:" + ex.Message + "
    ");
            });
        }
    }
    View Code

    测试截图:

  • 相关阅读:
    Debian apt-get 无法补全
    Python 字典排序
    Python 替换字符串
    Debian 7 64位安装 wine
    Python Virtualenv 虚拟环境
    ASP.NET MVC ModelState
    Oracle存储过程写法
    利用ODBC从SQLServer向Oracle中导数据
    web自定义控件UserControl
    工作笔记
  • 原文地址:https://www.cnblogs.com/s0611163/p/13029603.html
Copyright © 2011-2022 走看看