Heim > Backend-Entwicklung > C++ > Wie kann ich den aufgerufenen Code in der GUI -Event -Handhabung vereinfachen?

Wie kann ich den aufgerufenen Code in der GUI -Event -Handhabung vereinfachen?

Barbara Streisand
Freigeben: 2025-01-30 23:01:12
Original
1047 Leute haben es durchsucht

How Can I Simplify InvokeRequired Code in GUI Event Handling?

vereinfachte automatische Verarbeitungsverarbeitung incokeRequired Code -Modus

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();
    }
}
Nach dem Login kopieren

Für die Situation, die zurückgegeben werden muss, können Sie diese Ersatzimplementierung verwenden:

richEditControl1.InvokeIfRequired(() =>
{
    // 操作控件
    richEditControl1.RtfText = value;
    RtfHelpers.AddMissingStyles(richEditControl1);
});
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren
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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage