Im работает над приложением WPF. У меня есть метка «Status_label» в MainWindow.xaml
. и я хочу изменить его содержимое из другого класса (signIn.cs). Обычно я в состоянии сделать этоИзменение метки WPF mainwindow из другого класса и отдельной темы
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(() =>{..........
или что-то еще?
EDIT: Я позову это изменение этикетки действия от другого класса, как-хорошо, как отдельного поток
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 ине вар возвращение mainWin ошибка The calling thread cannot access this object because a different thread owns it.
Пожалуйста, наставит меня,
Спасибо
Почему это проголосовало? – iJay
Возможно, потому что на этот вопрос был дан ответный момент. Некоторые «googling» предоставят вам правильное решение. – DHN