Re: [问题] Thread被咬住如何解决?

楼主: pthuang (◢晓筱◤)   2015-07-28 17:31:16
: 推 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
作者: james732 (好人超)   2015-07-28 18:48:00
你可以先Google看一下lambda的语法

Links booklink

Contact Us: admin [ a t ] ucptt.com