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";
}
}
Es gibt ein prope ist rty InvokeRequired. Sie sollten dies zuerst anrufen, um zu wissen, ob Sie Invoke brauchen oder nicht. –
Nur Overhead des Aufrufs. Es sollte gut funktionieren, aber WARUM? – dbasnett
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) –