※ 引述《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