Ich arbeite an einer WPF-Anwendung. Ich habe ein Label namens "Status_label" in MainWindow.xaml
. und ich möchte seinen Inhalt von einer anderen Klasse (signIn.cs) ändern.
Normalerweise kann ich das tun
Aber mein Problem ist, wenn ich versuche, über einen anderen Thread in der Klasse signIn.cs darauf zuzugreifen, gibt es einen Fehler:
%Vor% Kann ich das lösen, indem ich Dispatcher.Invoke(new Action(() =>{..........
oder etwas anderes benutze?
BEARBEITEN: Ich werde diese Label-Änderung Aktion von verschiedenen Klassen als auch separate Thread
nennenMainWindow.xaml
%Vor%SignIn.cs
%Vor% Zeile var mainWin gibt den Fehler The calling thread cannot access this object because a different thread owns it.
Bitte führen Sie mich,
Danke
Ich habe meine Frage gelöst, hoffe, dass jemand das braucht. Aber weiß nicht, ob das der optimierte Weg ist.
In meiner mainWindow.xaml.cs :
%Vor%von meiner Klasse SignIn.cs
%Vor%Das funktioniert gut für mich. Weitere Informationen finden Sie hier Ändern Sie den WPF-Fensterbeschriftungsinhalt von einem anderen Klasse und separater Thread
Prost !!
Dank der Antworten haben sie mich in die richtige Richtung geführt. Ich habe diese einfache Lösung gefunden:
%Vor%Dann in meinem Eventhandler in einer anderen Klasse, die in einem anderen thred läuft:
%Vor%Dies zeigt das minimierte Fenster an, wenn eine Nachricht über eine namedPipeline empfangen wird.
Danke! Ich habe eine etwas andere Lösung gefunden, aber Sie haben mich mit Ihrer Antwort definitiv in die richtige Richtung gelenkt.
Für meine Anwendung habe ich viele Steuerelemente in main, und die meisten Methodenaufrufe von main erfolgten innerhalb des Bereichs von main, sodass es einfacher war, den Standardwert {get; Setzen Sie} in MainWindow.xaml.cs (oder definieren Sie einfach die Steuerelemente in XAML).
Im Code-Behind des übergeordneten Fensters starte ich das MainWindow in einem separaten Thread (vereinfachtes Beispiel). Der Schlüssel besteht darin, main global zu definieren, obwohl es innerhalb von Window_Loaded () instanziiert wird:
%Vor%In meinem MainWindow-Code-Behind interagiere ich einfach mit den Steuerelementen, als ob es eine einfache Singlethread-Anwendung wäre (in meinem Fall gibt es keine Kontrolle über den übergeordneten Thread aus dem untergeordneten Thread). Ich kann jedoch main vom übergeordneten Thread wie folgt steuern:
%Vor%Indem ich es so mache, vermeide ich die Komplexität, alles in Code-Behind zu definieren und den Dispatcher aus dem Code-Behind von MainWindow.xaml.cs zu verwenden. Es gibt nur ein paar Stellen in meiner Anwendung, wo ich main aus dem Elternfenster ändere, also war das einfacher für mich, aber Ihre Herangehensweise scheint genauso gültig zu sein. Nochmals vielen Dank!
Tags und Links wpf dispatcher mainwindow