Der herkömmliche Codemodus für den aufgerufenen Code ist kompliziert und frustrierend in der GUI -Ereignisverarbeitung. Dieser Modus muss prüfen, ob der aktuelle Thread auf das Handle des Steuerelements zugreifen kann.
Um dieses Problem zu lösen, haben wir die Methode von Lee verbessert und eine vereinfachte Methode entwickelt:
Diese Methode hat die Kontrollklasse erweitert.
public static void InvokeIfRequired(this Control control, MethodInvoker action) { // 检查可见性,如有必要则调用 while (!control.Visible) { System.Threading.Thread.Sleep(50); } if (control.InvokeRequired) { control.Invoke(action); } else { action(); } }
Für die Situation, die zurückgegeben werden muss, können Sie diese Ersatzimplementierung verwenden:
richEditControl1.InvokeIfRequired(() => { // 操作控件 richEditControl1.RtfText = value; RtfHelpers.AddMissingStyles(richEditControl1); });
Zusätzlich zur Steuerung kann die Isynchronikinvoke -Schnittstelle auch von dieser Methode profitieren:
private static T InvokeIfRequiredReturn<T>(this Control control, Func<T> function) { if (control.InvokeRequired) { return (T)control.Invoke(function); } else { return function(); } }
Es ist erwähnenswert, dass IsynchronizeInvoke ein Objektarray als Parameterliste der Invoke -Methode benötigt. Wenn es jedoch keine Parameter gibt, können Sie NULL übergeben, wie im Dokument beschrieben.
public static void InvokeIfRequired(this ISynchronizeInvoke obj, MethodInvoker action) { if (obj.InvokeRequired) { obj.Invoke(action, null); } else { action(); } }
Das obige ist der detaillierte Inhalt vonWie kann ich den aufgerufenen Code in der GUI -Event -Handhabung vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!