Möchte man aus einer anderen Klasse, aus einem anderen Thread etwas in die Mainklasse Steuerelemente schreiben, stößt man auf 2 Probleme:
1. Man kann aus Thread 2 nicht in Thread 1 schreiben
2. Man kann nicht, ohne ein Objekt angelegt zu haben nicht in die Steuerelemente schreiben.
Abhilfe schafft ein kleiner Trick.
MainWindow.cs:
1 2 3 4 5 6 |
internal static MainWindow main; internal object Status { get { return lstInfo.Items.CurrentItem; } set { Dispatcher.Invoke(new Action(() => { lstInfo.Items.Add(value); })); } } |
1 2 3 4 5 |
public MainWindow() { InitializeComponent(); main = this; } |
meineAndereKlasse.cs:
1 |
MainWindow.main.Status = "Status OK; |
Kleine Erweiterung, selbes Prinzip um ein Imagecontrol zu ändern:
MainWindow.cs:
1 2 3 4 |
internal string StatusLED { set { Dispatcher.Invoke(new Action(() => { imgStatus.Source = new BitmapImage(new Uri(value, UriKind.RelativeOrAbsolute)); })); } } |
meineAndereKlasse.cs:
1 |
MainWindow.main.StatusLED = @"/red-led-2-md.png"; |
Quelle: Stackoverflow
Login