Zugriff auf die GUI aus einem anderen Thread

Wer hatte das Problem nicht schon einmal. Man benötigt mehrere Threads und will diesen auch Zugriff auf ein label geben um den Status anzeigen zu lassen.
So oder so ähnlich könnte es sein.

Da jetzt allerdings nicht ohne weiteres direkt von einem 2. Thread auf die GUI Zugegriffen werden kann, müssen wir eine andere Möglichkeit finden.

Ich persönlich verwende diese herangehensweise häufiger in kleinen Applikationen.

Deshalb möchte ich euch heute eine Möglichkeit zeigen, mit der Ihr von einem anderen Thread, ohne großen Aufwand, auf die GUI zugreifen könnt.

Als erstes benötigen wir einen “Delegate”:

public delegate string ChangeTextboxDelegate(string text);

Diese würde ich über die dazugehörige, nachfolgende, Funktion setzen.

Wir benötigen jetzt noch eine Funktion, die prüft, ob dieses Element einen “Invoke” benötigt.

Falls diese einen “Invoke” benötigt, sollte dieser auch mit den passenden Parametern ausgeführt werden.

In diesem Invoke wird der Delegate als neues Objekt aufgerufen und mit der Funktion zum ändern der GUI als Parameter übergeben.

Als 2. Parameter erhält der “Invoke” die Parameter, die an den Delegate übergeben werden sollen.

Am Ende sieht das alles zusammen so aus:

public delegate string ChangeTextboxDelegate(string text);

public string ChangeTextbox(string text)
{
	if(InvokeRequired)
	{
		return Invoke(new ChangeTextboxDelegate(ChangeTextbox), text);
	}
	else
	{
		MyTextbox.Text = text;
	}
}

Leave a Reply

Optimized by SEO Ultimate