2017-07-04 1 views
0

Ich lese das Gewicht auf einer Waage, die über eine serielle Schnittstelle angeschlossen ist. Wenn sich das Gewicht ändert, gibt die Waage ein Ereignis zurück. Dieses Ereignis funktioniert gut, aber ich kann den Wert eines WPF-Elements in der Ereignisbehandlungsroutine (mit Label und Textfeld) nicht mit der neuen Gewichtung ändern.WPF-Element nach Ereignisrückruf ändern

Der Ereignishandler befindet sich in der richtigen Fensterklasse.

Wenn ich eine MessageBox anrufe, um das Gewicht anzuzeigen, ist alles in Ordnung.

Kann mir jemand erklären, wie man die WPF-Elemente nach dem Event-Callback ändert. Dies ist meine Rückruffunktion.

+0

Versuchen zu tun 'Dispatcher.Invoke (() => LblScaleAmount.Content = Gewicht);' – Evk

+0

vielen Dank! viel, das hat tatsächlich den Trick gemacht. Bitte geben Sie Ihre Empfehlung als Antwort, damit ich sie akzeptieren kann. –

+0

In WPF ist die beste Antwort einfach Datenbindung zu verwenden. Es ist selten, dass Sie 'Dispatcher.Invoke()' aufrufen müssen, und es scheint hier nicht angebracht zu sein. Weitere Informationen dazu sowie weitere Möglichkeiten zum Verwalten von Thread-übergreifenden Aktualisierungen finden Sie unter markiertes Duplikat. –

Antwort

0

Da Sie von der seriellen Schnittstelle Gewichtsinformationen erhalten, besteht eine hohe Wahrscheinlichkeit, dass der Rückruf im Hintergrund ausgeführt wird (Nicht-UI-Thread). Sie können nicht-Steuerelemente von Hintergrund-Thread aktualisieren, so benötigen Sie Update-Operation zurück zum UI-Thread versenden:

Dispatcher.Invoke(() => LblScaleAmount.Content = weight);