Я пишу библиотеку для управления приложением через TCP. Соединения обрабатываются асинхронно, поэтому я добавил событие в класс связи, чтобы указать, что сообщение получено.Избегайте использования Dispatcher.BeginInvoke
public event EventHandler<MessageRecievedEventArgs> MessageRecieved;
Но когда я поднимаю событие обработчик события в главном классе выполняет обработчик события на TCP поток не основной нити.
Как избежать необходимости обновления пользователем GUI путем вызова?
private void MessageRecieved(object sender, MessageRecievedEventArgs e)
{
Dispatcher.BeginInvoke((Action)(()=> { textBox1.Text = e.Message; }));
}
Короткий ответ, вы не можете ily делаю это. Если вы используете WPF, вам нужно запустить задачу в потоке пользовательского интерфейса, следовательно, диспетчер. Некоторые детали относительно структуры вашей программы были бы полезны, как и более подробное объяснение того, что вы пытаетесь сделать. – Alex
Вы определенно хотите, чтобы обновление пользовательского интерфейса происходило в потоке пользовательского интерфейса, а также вы не хотите, чтобы библиотека узнавала о вашем потоке пользовательского интерфейса. Что вы можете сделать, так это найти элегантный способ их преодоления. Что вас беспокоит, как вы это делаете сейчас? –
@Ycoub Massad Мне кажется, что мне неловко требовать, чтобы пользователь вносил накладные расходы с помощью Диспетчера. –