Re: [問題] Thread被咬住如何解決?

看板C_Sharp (C#)作者 (◢曉筱◤)時間10年前 (2015/07/28 17:31), 10年前編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/4 (看更多)
: 推 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://www.ptt.cc/bbs/C_Sharp/M.1438075879.A.5DC.html ※ 編輯: pthuang (114.43.101.171), 07/28/2015 17:33:36

07/28 18:48, , 1F
你可以先Google看一下lambda的語法
07/28 18:48, 1F
文章代碼(AID): #1LjqldNS (C_Sharp)
文章代碼(AID): #1LjqldNS (C_Sharp)