测试代码:
1 using System; 2 System.Collections.Generic; 3 System.ComponentModel; 4 System.Data; 5 System.Drawing; 6 System.Linq; 7 System.Text; 8 System.Threading; 9 System.Threading.Tasks; 10 System.Windows.Forms; 11 Utils; 12 13 namespace test 14 { 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 private void Form1_Load(object sender,EventArgs e) 23 24 25 26 27 /// <summary> 28 /// 执行任务 29 </summary> 30 string DoWork(string str) 31 32 Thread.Sleep(3000); //模拟延迟 比如网络请求 用了3000毫秒 33 return "输出:" + str; 34 35 36 37 38 39 public Task<string> DoWorkByTask( 40 41 return Task.Run(() => 42 { 43 Thread.Sleep( 44 45 }); 46 47 48 49 测试1 50 51 async void button1_Click( 52 53 LogTimeUtil logTime = new LogTimeUtil(); 54 55 var t1 = DoWorkByTask(测试值1"); 56 57 var t2 = DoWorkByTask(测试值2 58 59 string r1 = await t1; 60 61 textBox1.AppendText(r1 + \r\n 62 63 string r2 = t2; 64 65 textBox1.AppendText(r2 + 66 67 logTime.LogTime(耗时,textBox1); 68 69 70 71 测试2 72 /// 73 等效于 测试1 74 75 void button2_Click( 76 77 Task.Run(() => 如果不加Task.Run,界面会卡 78 79 LogTimeUtil logTime = 80 81 Task<string> t1 = Task.Run<string>(() => { return DoWork(); }); 82 Task<string> t2 = Task.Run< 83 84 Task.WaitAll(t1,t2); 85 86 this.Invoke(new Action(() => 线程中修改控件数据要使用Invoke 87 { 88 textBox1.AppendText(t1.Result + 89 textBox1.AppendText(t2.Result + 90 })); 91 92 logTime.LogTime( 93 94 95 96 97 测试3 98 99 void button3_Click(100 101 LogTimeUtil logTime = 102 103 var r1 = await DoWorkByTask(104 105 textBox1.AppendText(r1 + 106 107 var r2 = 108 109 textBox1.AppendText(r2 + 110 111 logTime.LogTime(112 113 114 115 测试4 116 117 等效于 测试3 118 119 void button4_Click(120 121 Task.Run(() => 122 123 LogTimeUtil logTime = 124 125 Task<126 t1.Wait(); 127 128 129 textBox1.AppendText(t1.Result + 130 131 132 Task<133 t2.Wait(); 134 135 136 textBox1.AppendText(t2.Result + 137 138 139 logTime.LogTime(140 141 142 143 } 144 }
测试输出:
附 LogTimeUtil.cs:
System.Windows.Forms; Utils { <summary> 记录耗时 </summary> LogTimeUtil { private DateTime _lastTime; LogTimeUtil() { _lastTime = DateTime.Now; } <summary> 记录耗时 </summary> void LogTime( msg) { double d = DateTime.Now.Subtract(_lastTime).TotalSeconds; LogUtil.Log(msg + ,耗时:" + d.ToString(0.000") + 秒); } msg,TextBox txt) { DateTime.Now.Subtract(_lastTime).TotalSeconds; msg = msg + 秒\r\n; if (txt.Invokerequired) { txt.Invoke(new Action(() => { txt.AppendText(msg); })); } else { txt.AppendText(msg); } } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。