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
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...
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
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 🙂
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