Re: [問題] delegate.BeginInvoke跟control.invoke …

看板C_Sharp作者 (Harold)時間18年前 (2007/11/22 12:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/9 (看更多)
BeginInvoke 請參考 .NET Asynchronous Programming Design Patterns http://msdn2.microsoft.com/EN-US/library/ms228969.aspx 基本上 Delegate.BeginInvoke 和 Control.BeginInvoke 都是 async call Delegate.BeginInvoke 可以用在任何地方, .NET 會從 ThreadPool 中找 一個 thread 去執行你的 function Control.BeginInvoke 專門用在 Windows Forms, 因為 Windows Forms 的特性, control 的 method 不能在任何一個 thread 上執行, 一定要在原來建立 Control 的 thread 上執行 ※ 引述《reptile0426 ( )》之銘言: : 首先先感謝toki大的解說,他講的是control.BeginInvoke的觀念 : 後來我自己又看了一下兩者的差別 : 當你的其他thread (不是UI thread)要對UI thread的控制項做改變 : 就必須呼叫control.BeginInvoke來做 : 而delegate.BeginInvoke在我的理解看來 : 當你為了做某件事且同時顯示某些狀態在視窗上, : 若你用ui thread來做,那麼運算的過程式不能同時顯示的,因為他還在算東西 : 必須等到運算完,才能做出顯示,這樣失去我們原本設計這視窗程式意義 : 所以用delegate.BeginInvoke來呼叫要運算的function : 呼叫後他會開一個thread來做這件事,所以ui thread不會被佔用 : 這樣就可以更新UI畫面了 : 而上一篇MSDN的例子,他是先呼叫了delegate.BeginInvoke來處理運算 : 運算過程中 運算進度會不斷增加 並且想把進度顯示在progressbar上 : 而這更新progressbar並顯示就是UI thread要做的, : 而進度只有運算的那個function知道自己算到哪了 他在另一個thread上 : 這時就接到toki大講的了 : 我想大概就是這樣吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 67.161.17.127
文章代碼(AID): #17HG8wLG (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 9 篇):
文章代碼(AID): #17HG8wLG (C_Sharp)