作者pthuang (◢晓筱◤)
看板C_Sharp
标题Re: [问题] Thread被咬住如何解决?
时间Tue Jul 28 17:31:16 2015
: 推 singledream: 不要在UI thread做CPU bounding的事情。 07/23 21:58
: → singledream: 这例子一直去频繁更新UI也是不好的例子就是了, 07/23 21:59
: → singledream: 请把耗时的时间交给背景去做,以下是更改的例子。 07/23 21:59
: → singledream: http://ge.tt/9HD62xK2/v/0?c,有误请见谅。 07/23 22:00
谢谢回覆 这几天一直在研究这支程式
但还是有些地方不太清楚....
首先是语法的部份 ==============================================
【1】
async private void button1_Click(object sender, EventArgs e)
{
...
await Task.Run(async () => {...});
...
}
这边不懂的地方有两个
1.这async本身就包在一个async里面了不是吗
为何要用一个await加上Task.Run这个看似没有任何作用的东西
再包入一个async才开始真正加入程式码?
而这部份的问题有可能是因为我没搞懂Task.Run真正的用途而导致的 @@"
2.为什麽里面这个async可以直接加上「()」和「=>」这些符号
还有它们的作用是什麽?
【2】
_CurrentContext.Post(new SendOrPostCallback((_) => {...}), null);
这段....老实说....有点....超出理解范围 |||"orz
但是连查了MSDN都看不懂它们要怎麽使用 爬Google也几乎找不到相关资料
希望能有详细一点的解释还有符号的说明 真是不好意思 OAQ
【3】
await Task.Delay(50);
不太懂这边加上了Delay的用意 拔掉它也看不出来有什麽明显的差别 @@"
接着是设计逻辑 ================================================
目前可以看得出来的地方是 不会卡住CPU的地方直接写出来
可能会咬死的地方则是用async跟await制造出另一个thread
虽然直接看完成的程式可以得到这个结论
但是里面的语法跟设计期间的逻辑却还是有点不懂
换句话说就是如果要从零开始重新coding的话很可能会想不到该怎麽做
所以想要知道这样的过程是怎麽思考出来的
另外 推文也有提到说「一直去频繁更新UI也是不好的」
那应该怎麽做才对?
除了不断地去更新它 我实在想不到什麽比较好的办法 |||"orz
想要好好把这些用法学起来 成为自己用得上手的工具
希望有人
或是可以帮我解个惑 谢谢 m(_ _)m
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.43.101.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1438075879.A.5DC.html
※ 编辑: pthuang (114.43.101.171), 07/28/2015 17:33:36
1F:→ james732: 你可以先Google看一下lambda的语法 07/28 18:48