Im pracuje nad aplikacją WPF. Mam etykietę "Status_label" w MainWindow.xaml
. i chcę zmienić jego zawartość z innej klasy (signIn.cs). Normalnie jestem w stanie to zrobićZmiana etykiety głównego okna głównego WPF z innej klasy i osobnego wątku
var mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
mainWin.status_lable.Content = "Irantha signed in";
Ale mój problem jest, gdy próbuję uzyskać do niego dostęp za pośrednictwem innego wątku w klasie signIn.cs, daje błąd:
The calling thread cannot access this object because a different thread owns it.
Czy mogę rozwiązać ten problem, używając Dispatcher.Invoke(new Action(() =>{..........
lub czegoś innego?
EDIT: Zadzwonię akcja ta zmiana etykiety z innej klasy jak-dobrze jako oddzielny wątek
MainWindow.xaml
<Label HorizontalAlignment="Left" Margin="14,312,0,0" Name="status_lable" Width="361"/>
SignIn.cs
internal void getStudentAttendence()
{
Thread captureFingerPrints = new Thread(startCapturing);
captureFingerPrints.Start();
}
void mySeparateThreadMethod()
{
var mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
mainWin.status_lable.Dispatcher.Invoke(new Action(()=> mainWin.status_lable.Content ="Irantha signed in"));
}
l ine var błąd powrót mainWin The calling thread cannot access this object because a different thread owns it.
proszę kierować do mnie,
Dziękuję
Dlaczego to nie jest głosowanie? – iJay
Być może dlatego, że na to pytanie odpowiedziano na kilka godzin. Niektóre "googlowanie" zapewniłoby odpowiednie rozwiązanie. – DHN