看板 C_Sharp 關於我們 聯絡資訊
※ 引述《horngsh (要公理要正義)》之銘言: : ※ 引述《reptile0426 ( )》之銘言: : : 但是我又對worker thread這個東西有點疑問 : : 它不是UI thread,那他是什麼東西 : : 一個windows form程式除了本身的main thread之外,背後還有一個worker thread : : 然後又冒出一個threadpool,這更讓我想瞭解c#觀念 越來越模糊 : 發現爬蟲類仁兄好像有來註冊, 感恩捧場..... : 假設你有一個FORM(它是UI THREAD), 如果你按了一個BUTTON後開始計算圓週率至小數 : 後200位, 你會發現你的主表單都沒有反應了(not responsive), 原因是你是直接在 : 你的UI THREAD中做計算的工作, 所以它沒有空去輪詢使用者對UI的動作了, 解決 : 的方法是在UI THREAD中, 另外生成一個worker thread, 把計算圓週率PI的工作委任 : (Delegate)給它, 如此一來UI THREAD就會仍然可以正常的反應使用者UI的輸入動作, : 但這樣一來會產生另外一個問題, 就是worker thread變成不能直接更新UI thread上 : 面的控制項了(就是主表單), 必須透過Control.Invoke or Control.BeginInvoke去 : 喚起一個Delegate, 在此Delegate所指到的方法中就可以安全地更新UI上的Control.. : 說得很雜, 希望你有看懂... 謝謝你 那關於worker thread是什麼我大概知道了, 有人要解答control.BeginInvoke跟 delegate.BeginInvoke的不同嗎= =? 這位大大講的這個範例我有看過,觀念我也懂得 其實這提的疑問也是來自於這篇文章 http://msdn2.microsoft.com/en-us/library/ms951089.aspx 他在裡面同時用到Control.BeginInvoke跟delegate.BeginInvoke 搞得我....探口氣 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.101.28