У меня есть клиент-серверное приложение (Trivia Game).
Моя проблема:
Когда клиенты находятся в "waitRoom", программа запускает отдельный поток, который каждую секунду запрашивает у сервера состояние игры (чтобы увидеть, присоединился ли другой клиент, чтобы увидеть, началась ли игра или закрыл ли администратор комнату). ).
В моем случае, когда администратор закрывает комнату, все клиенты должны вернуться к экрану меню. Отдельный поток получает сообщение, которое говорит ему закрыть комнату, и теперь поток должен изменить текущее отображаемое окно.
Я пытался использовать Dispatcher.Invoke, но безуспешно:
public void returnToMenuScreen()
{
Dispatcher.Invoke(() =>
{
this.Visibility = Visibility.Hidden;
this.IsEnabled = false;
Menu newScreen = new Menu(Globals.SOCKET, Globals.USER);
newScreen.Show();
});
}
Globals.SOCKET: (Розетка)
Globals.USER: (строка)
РЕДАКТИРОВАТЬ: Этот код не работает, и я получаю сообщение об ошибке, что другой поток (основной) владеет свойством.
2-е РЕДАКТИРОВАНИЕ:
public void displayPlayers(string players)
{
//spliting all the names.
string[] names = players.Split(", ".ToCharArray());
//Removing The un-updated list.
playersListBox.Dispatcher.Invoke(new Action(() => playersListBox.Items.Clear()));
//Displaying the names.
foreach (string name in names)
if (!String.IsNullOrEmpty(name))
playersListBox.Dispatcher.Invoke(new Action(() => playersListBox.Items.Add(name)));
}
этот код работает, я изменяю элементы в отображаемом в данный момент списке.