2009-02-09 13 views
10

Was ist der Unterschied zwischen InvokeRequired und somecontrol.InvokeRequired?Verwenden von InvokeRequired vs control.InvokeRequired

wie diese,

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (InvokeRequired) 
    { 
     BeginInvoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

und

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (someControl.InvokeRequired) 
    { 
     someControl.Invoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

Antwort

20

Die erste Version überprüft den Faden verantwortlich für diese Kontrolle. Die zweite Version überprüft den Thread, der für someControl verantwortlich ist. (Und dito, für die Steuerung des Threads sie delegieren dann den Aufruf zu.)

Sie könnten möglicherweise anders sein - obwohl sie eigentlich sollten nicht sein, wenn die beiden Kontrollen im gleichen Fenster der obersten Ebene sind. (Alle Steuerelemente in einem Fenster sollten in demselben Thread ausgeführt werden.)

3

Der Unterschied ist das Steuerelement, auf das Sie auf die Eigenschaft zugreifen. Wenn Sie innerhalb einer Methode im Formular auf InvokeRequired zugreifen, greifen Sie effektiv auf die InvokeRequired-Eigenschaft des Formulars zu.

Wenn das Formular und das someControl in demselben Thread erstellt werden, geben sie denselben Wert zurück.

2

Es scheint, dass Sie im ersten Beispiel im Rahmen einer Kontrolle sind, während Sie in der zweiten nicht sind. Die Hauptform ist eine Kontrolle wie jede andere auch. Wenn someControl zur Control-Auflistung des Hauptsteuerelements hinzugefügt wird, können Sie beides verwenden.

Verwandte Themen