2012-10-28 54 views
3

,代表的定義是:在爲什麼使用委託C#允許線程訪問形式的對象(如文本框)從我讀

委託是一種引用的方法。一旦代表 分配了 方法,它的行爲與該方法完全相同。與任何其他方法一樣,代理方法可以使用 ,並帶有參數和返回值。

現在我知道該怎麼寫,形成對象說,通過螺紋文本框使用委託,但是我不明白這是如何在委託處理的方法可以在表格上訪問 的所有對象。如果有人能夠澄清這一點,我將不勝感激。

編輯: 現在,這裏是我會怎樣創建一個委託

public delegate void MyDelegate(string str,int str2); 

void main() 
{ 
Thread t = new Thread(RunInThread); //Method that will run in a separate thread 
t.Start(); 
} 
void RunInThread() 
{ 
MyDelegate delInstatnce = new MyDelegate(AddControl); //Attach a method 
this.Invoke(delInstatnce,"First Parameter",1001); 
} 
void AddControl(string str,int str2) 
{ 
    //Why could you access all the form components from here ? 
} 
+3

人們需要停止downvoting的問題,只是因爲提問者在問題的前提混淆。 –

回答

2

首先,這是代表們的很困惑描述。您可能會發現my article on delegates and events更有幫助。

其次,它不是很清楚你的問題是什麼,鑑於標題和正文談不同的東西。

委託有效僅僅是一個對象,它封裝調用類內的方法的想法。可接近該方法在委託被控制創建時間,而不是在執行時間 - 因此,例如,在一個類中的代碼可以創建其指的是私人方法的委託,並委託可以外部被返回給代碼class ...當它被調用時,私有方法被調用。就訪問而言,這仍然是「安全的」,因爲只有有權訪問私有方法的代碼纔可以創建委託實例。在私有方法中,代碼可以以正常方式訪問所有其他成員。

現在你的標題談論了線程......並且使用代理並不實際實際上允許你從非UI線程訪問UI元素。但是,它允許您使用類似於Control.InvokeDispatcher.Invoke的東西,它們每個都在UI線程上調用委託實例。所以你基本上說,「我需要運行一些代碼,但我想在正確的線程上運行它 - 請爲我做。」代表就是你要在UI線程上運行哪些代碼的方式。

希望有所幫助。隨意要求更具體的澄清。

+0

我剛更新了這個問題。希望解釋我的問題 –

+0

@ Casper_2211:嗯,它仍然不清楚的地方線程來了,但我的答案,這部分可能是最直接相關的:「在私有方法,代碼可以訪問所有其他成員以正常方式。 「你爲什麼期望一個私有方法*不*能夠訪問所有的東西? –

+0

感謝您的回答,讓我重述一下我的問題,如果我在'RunInThread'內寫了'some_textbox.text =「ABC」'這樣的東西,它就不會起作用。爲什麼我必須在這裏使用委託來訪問表單控件? –

相關問題