Laden...

Auf WPF Elemente von Anderen Thread zugreifen

Erstellt von King vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.950 Views
K
King Themenstarter:in
27 Beiträge seit 2006
vor 15 Jahren
Auf WPF Elemente von Anderen Thread zugreifen

Hi Leute!

Ich möchte folgendes machen. Ich will ein Normales WPF Programm starten und wenn der User einen Button betätigt ein Event auslösen d.h. einen Thread starten welcher Daten verschiebt bzw. verschiedene Aktionen im Hintergurnd ausführt (ohne das Hauptfenster zu blokieren). Natürlich soll der User von diesen Aktionen auch was mitbekommen. Dazu müßte ich vom Thread aus auf die WPF GUI Oberfläche zugreifen können.

Einfaches Beispiel:

User klickt Startbutton wir erhöhen im externen Thread pro sekunde einen Zähler, geben ihn in einem Label,TextBlock,... aus und das solange bis der User den stop Button betätigt.

Leider habe ich zu wenig Ahnung wie ich von einem Thread aus auf die Oberfläche zugreifen kann, so dass ich auf die WPF GUI Elemente zugreifen und diese verändern kann.

Ich bitte euch um Hilfe und bin für jeden Tipp und Link dankbar.

ps: habe schon gegoogelt aber nix gescheites gefunden

3.971 Beiträge seit 2006
vor 15 Jahren

WPF gibts dazu die Dispatcher-Klasse, die auch wie Control eine Funktion Invoke anbietet.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

V
86 Beiträge seit 2008
vor 15 Jahren

BackgroundWorker dürfte hier auch funktionieren.

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo Virussoul,

der BackgroundWorker kann für die Abarbeitung der "aufwendigen" Arbeit genommen wie ein Thread klar aber um die GUI in WPF von einem anderen Thread zu aktualisieren muss man den Dispatcher benutzen.

Gruß Daniel

V
86 Beiträge seit 2008
vor 15 Jahren

Wohl wahr. Aber die Beschreibung die er oben gegeben hatte, kann man einfacher mit einem Backgroundworker bewerkstelligen, zumindest meiner Meinung nach. Solang es nur darum geht, einen Counter hochzuzählen, oder eine ProgressBar weiterlaufen zu lassen, reicht der BackgroundWorker vollkommen aus. Sobald aber mehr Interaktion vonnöten ist, reicht dieser nicht mehr 🙂

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo 🙂

Ich glaube wir haben aneinander vorbeigeredet. Der Backgroundworker auch in WPF kann dafür genutzt werden aber der macht auch nix anderes als das DispatcherSynchronizationContext zu benutzen um die GUI über den Dispatcher zu aktualisieren 🙂 Daher ^^ Ich wollte nur den Dispatcher in Vordergrund stellen, nicht das er auf die Idee von einem Invoke kommt 🙂 Backgroundworker oder eigener Thread ist dabei egal 🙂

Gruß Daniel

K
King Themenstarter:in
27 Beiträge seit 2006
vor 15 Jahren

vielen Dank für eure Tipp haben wir enorm weitergeholfen 🙂