2016-07-04 11 views
3

In C# gibt es ein Problem mit Control.Invoke, um eine Eigenschaft eines Steuerelements aus demselben Thread zu ändern, in dem das Formular ausgeführt wird?Control.Invoke aus demselben Thread, in dem das Formular ausgeführt wird

Ich weiß, es wäre am besten mit Control.Property = value, aber ich würde gerne wissen, welche die Folgen der Verwendung von Control.Invoke stattdessen sind.

Beispiel:

Mit dieser:

public partial class FormMain : Form 
{ 
    private void Button1_Click(object sender, EventArgs e) 
    { 
     this.Invoke(new delegate {Label1.Text = "Hello"}); 
    } 
} 

Statt dessen:

public partial class FormMain : Form 
{ 
    private void Button1_Click(object sender, EventArgs e) 
    { 
     Label1.Text = "Hello"; 
    } 
} 
+2

Es gibt ein prope ist rty InvokeRequired. Sie sollten dies zuerst anrufen, um zu wissen, ob Sie Invoke brauchen oder nicht. –

+2

Nur Overhead des Aufrufs. Es sollte gut funktionieren, aber WARUM? – dbasnett

+6

Entsprechend der [Referenzquelle] (http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Control.cs7241): "Es ist ein Fehler, dies anzurufen der gleiche Thread, zu dem das Steuerelement gehört. " (Dies ist auf 'Invoke (delegate, object [])', aber wir können sehen, dass 'Invoke (delegate)' nur an diese Methode delegiert) –

Antwort

-1
this.Invoke(new Action(
    delegate() 
    { 
     label2.Text = "Test"; 
    })); 

oder

this.Invoke(new MethodInvoker(
    delegate() 
    { 
     label2.Text = "Test"; 
    })); 
+0

Haben Sie die Frage gelesen? – Blorgbeard

+0

@Blorgbart du redest nicht über deinen Befehl. Ich hoffe, dass Sie Ihrer Frage helfen wollen !! Wenn Sie über meine Antwort nicht weiterhelfen, laden Sie Ihre Frage genauer auf. –

Verwandte Themen