Heim >Backend-Entwicklung >C++ >Wie kann ich den aufgerufenen Code in der GUI -Event -Handhabung vereinfachen?
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.
<code class="language-csharp">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(); } }</code>
Für die Situation, die zurückgegeben werden muss, können Sie diese Ersatzimplementierung verwenden:
<code class="language-csharp">richEditControl1.InvokeIfRequired(() => { // 操作控件 richEditControl1.RtfText = value; RtfHelpers.AddMissingStyles(richEditControl1); });</code>
Zusätzlich zur Steuerung kann die Isynchronikinvoke -Schnittstelle auch von dieser Methode profitieren:
<code class="language-csharp">private static T InvokeIfRequiredReturn<T>(this Control control, Func<T> function) { if (control.InvokeRequired) { return (T)control.Invoke(function); } else { return function(); } }</code>
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.
<code class="language-csharp">public static void InvokeIfRequired(this ISynchronizeInvoke obj, MethodInvoker action) { if (obj.InvokeRequired) { obj.Invoke(action, null); } else { action(); } }</code>wir geben zu, dass die Kontrolle, wenn sie anfänglich sichtbar ist, manchmal auf einen Fehlalarm stoßen kann. Um dieses Problem zu lösen, haben wir ein 50 -Millisekunden -Schlafintervall in sichtbarer Untersuchung hinzugefügt. Obwohl diese Methode normalerweise gültig ist, kann ihre Wirksamkeit von den spezifischen Anwendungsfällen und den Zeitanforderungen in Ihrer Anwendung abhängen.
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!