C_Sharp 板


LINE

尝试写一个比较简单好理解的版本 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void button1_Click(object sender, EventArgs e) { tabControl1.SelectedIndex = 1; var task = Task.Run(() => { DateTime DateTime1 = DateTime.Now; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); DateTime DateTime2; TimeSpan ts2; TimeSpan ts = new TimeSpan(); while (progressBar1.Value < progressBar1.Maximum) { DateTime2 = DateTime.Now; ts2 = new TimeSpan(DateTime2.Ticks); ts = ts1.Subtract(ts2).Duration(); this.Invoke((Action)(() => progressBar1.Value = Convert.ToInt32((ts.TotalSeconds / 1.5) * 100))); } //PASS Color 128,255,128 Green this.Invoke((Action)(() => label1.BackColor = Color.FromArgb(128, 255, 128))); this.Invoke((Action)(() => label1.ForeColor = Color.Green)); MessageBox.Show(ts.TotalSeconds.ToString()); }); await task; } } : 2.为什麽里面这个async可以直接加上「()」和「=>」这些符号 : 还有它们的作用是什麽? 这是lambda表示式 代表一个匿名函式 如果不使用lambda 另外写具名方法也可以 请参考 https://msdn.microsoft.com/zh-tw/library/bb397687 : 【2】 : _CurrentContext.Post(new SendOrPostCallback((_) => {...}), null); : 这段....老实说....有点....超出理解范围 |||"orz : 但是连查了MSDN都看不懂它们要怎麽使用 爬Google也几乎找不到相关资料 : 希望能有详细一点的解释还有符号的说明 真是不好意思 OAQ 这个超出新手范围 你应该要知道的是 在WinForm程式中 非UI执行绪不能更新UI 所以必须将你想要更新UI的方法想办法传给UI执行绪 singledream 是将UI执行绪的上下文记起来 然後将更新的方法Post过去 注意看我程式码红字的地方 我一样将一个方法(是一个lambda匿名函式) 传入this(form1)的Invoke方法 这个方法会在UI执行绪上执行你指定的方法 : 目前可以看得出来的地方是 不会卡住CPU的地方直接写出来 : 可能会咬死的地方则是用async跟await制造出另一个thread : 虽然直接看完成的程式可以得到这个结论 : 但是里面的语法跟设计期间的逻辑却还是有点不懂 : 换句话说就是如果要从零开始重新coding的话很可能会想不到该怎麽做 async await 背後是 ThreadPool 不一定会有新的执行绪 产生一个新的Task就是把你的方法放到排程里 runtime会调度ThreadPool帮你把Task完成 简单的想法就是把await看成是会存档的return 当Task完成後 会接着await之後继续做 不一定是原来的执行绪 只有winform会是同一个 因为背後偷偷帮你用了SynchronizationContext 可以试着在winform与console中执行下面的范例 private async void button1_Click(object sender, EventArgs e) { M1(); await Task.Delay(1000); M2(); } private void M1() { MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString()); } private void M2() { MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString()); } console internal class Program { static void Main(string[] args) { Program.MainAsync().Wait(); } private static async Task MainAsync() { Program.M1(); await Task.Delay(1000); Program.M2(); } private static void M1() { Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString()); } private static void M2() { Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString()); } } async await 更多请参考 https://msdn.microsoft.com/zh-tw/library/hh191443 由於 async await 是基於Task的 最好先搞懂TPL 会比较好懂 https://msdn.microsoft.com/zh-tw/library/dd537609 : 另外 推文也有提到说「一直去频繁更新UI也是不好的」 : 那应该怎麽做才对? : 除了不断地去更新它 我实在想不到什麽比较好的办法 |||"orz 可以设定Timer 由UI去问进度 或是Task一段时间回报进度再更新UI都可以 ※ 引述《pthuang (◢晓筱◤)》之铭言: : 希望有人或是fo40225可以帮我解个惑 谢谢 m(_ _)m --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.230.219.236
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1438096252.A.ADC.html ※ 编辑: fo40225 (61.230.219.236), 07/28/2015 23:19:02
1F:推 singledream: 有些解释好像比较让人浅显易懂,谢谢版友分享 07/31 00:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP