2011-08-23 76 views
0

我看着Control.BeginInvoke方法,我並沒有獲得什麼意思時,它說:理解困難C#方法描述

執行一個委託異步,控制的 基礎句柄創建的線程上上。

什麼是control's underlying handle?它有什麼作用?

+1

看到這個http://stackoverflow.com/questions/229554/whats-the-difference-between-invoke-and-begininvoke – V4Vendetta

回答

6

控制具有「線程親和力」 - 這意味着有一個需求它們僅直接操縱(或甚至檢查,除少數特定性質如InvokeRequired)通過創建它們的螺紋(通常稱爲UI線程)。 句柄只是OS控件和.NET控件之間的抽象。

這實際上做的是在windows消息循環中放置一條消息,該消息由UI線程(擁有該控件)拾取,導致您的委託在UI線程上被調用。這意味着它可以與控制器交談。如果您當前處於後臺線程(可能是異步回調或BackgroundWorker),並且需要更新UI,這非常有用。

1

它意味着窗口句柄 - 對控件的內部非管理參考。

Contorl.Handle

獲取窗口句柄控件綁定到。

和:

Handle屬性的值是一個Windows HWND。

+0

所以它等於'在創建控件的線程上異步執行一個委託。' – Caner

+0

@LAS_VEGAS - 這是我的理解。 – Oded

1

Windows窗體控件是在特定線程上創建的,並不適用於多線程環境。微軟這樣做是爲了讓控件只能從創建它的線程中操作,從而強制控件上的單線程環境。

控件上的BeginInvoke調用在該線程上提供給它的代碼。

+0

非常感謝+1 – Caner