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