我正在开发一个WPF应用程序。在MainWindow.xaml
中有一个标签称为“Status_label”。我想从不同的类(signIn.cs)更改它的内容。
通常我可以这样做。
var mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
mainWin.status_lable.Content = "Irantha signed in";
但是我的问题是,当我尝试在signIn.cs类中的不同线程中访问它时,会出现错误:
The calling thread cannot access this object because a different thread owns it.
我可以使用Dispatcher.Invoke(new Action(() =>{..........
或其他方法来解决这个问题吗?
编辑: 我还需要从不同的类和单独的线程中调用此标签更改操作。
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"));
}
line var mainWin return error因为不同的线程拥有该对象,所以调用线程无法访问此对象。
请指导我,
谢谢。