C# async await 异步执行方法封装 替代 BackgroundWorker
BackWork代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); } } } } }
测试代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 = string.Empty; int k = 0; BackWork.RunAsync((obj) => { str = "i=" + obj + "\r\n"; k = (int)obj; }, i, () => { textBox1.AppendText(str); BackWork.RunAsync(() => { str = "i=" + i + ", k=" + k + "\r\n"; }, () => { textBox1.AppendText(str); }, (ex) => { textBox1.AppendText("错误:" + ex.Message + "\r\n"); }); }, (ex) => { textBox1.AppendText("错误:" + ex.Message + "\r\n"); }); } }
测试截图: