0

Создаю сервер с таблицей, которая представляет собой usercontrol c именем Clientlist куда выводится информация о подключенных пользователях. При подключении к серверу, пользователь отправляет ему строку с информацией о себе (IP, имя компьютера) и на основе этой информации формируется строка в таблице. Строка представляет собой второй usercontrol. Clientlist имеет метод на добавление строки с информацией о пользователе

Все приведенные ниже действия происходят в классе Server

Сервер работает асинхронно и соответственно код выглядит примерно следующим образом: Программа доходит до строчки с ожиданием прихода строки

Client client = new Client();
handler.BeginReceive( client.buffer, 0, client.buffer.length, 0, new AsyncCallback(ReadCallback), client);

Как только к серверу приходит строка с информацией вызывается метод ReadCallback

public static void ReadCallback(IAsyncResult ar) {  
//Парс строки и заполнение полей класса Client
MainWindow main = new MainWindow();
main.Clientlist.AddClient(client)
//...
}

Приведенный вариант метода ReadCallback, конечно работать не будет, сразу вылетит ошибка о том, что это не STA поток и так далее.

Вот соответственно встал вопрос о том как из метода ReadCallback я могу обратится к своему Clientlist и отрисовать информацию о клиенте на своей форме.

  • 1
    Вы не должны в WPF хотеть обращаться к контролу из кода! Отделите логику от интерфейса, используйте привязки, пишите все по правилам MVVM и тогда не будет у вас подобных проблем. Ну а так, это скорей всего дубликат – EvgeniyZ Mar 03 '20 at 14:36
  • 1
    Если вам надо что то выполнить в UI потоке, то вы можете для этого использовать диспетчер. Например, Application.Current.Dispatcher.Invoke(...). – tym32167 Mar 03 '20 at 15:20

0 Answers0