Ошибка кодирования клиента для приложения в чате

#c#

#c#

Вопрос:

Я получаю ошибку в своем коде

Недопустимая операция между потоками: элемент управления «, доступный из потока, отличного от потока, в котором он был создан.

Я не знаю, почему это происходит. Кто-нибудь может мне это объяснить?

Комментарии:

1. Как кто-нибудь может объяснить ошибку, не видя вашего кода?

Ответ №1:

Это происходит из-за того, что вы обращаетесь к элементу управления в вашем приложении Windows Form из другого потока.

Не могли бы вы поделиться своим кодом?

Давайте предположим, что вы обращаетесь к TextBox (имя которого textBox1 ):

 textBox1.Text = "Modified text"
  

Вместо этого вы должны сделать:

 MethodInvoker m = () => { textBox1.Text = "Modified text"; };
if (InvokeRequired) {
    BeginInvoke(m);
}
else {
    m.Invoke();
}
  

Конечно, это был простой пример. Вы можете инкапсулировать вызывающую часть в метод, чтобы не повторять один и тот же код снова и снова. Что-то вроде:

 public void InvokeSafe(MethodInvoker m) {
    if (InvokeRequired) {
        BeginInvoke(m);
    }
    else {
        m.Invoke();
    }
}
  

итак, все, что вам нужно сделать, это:

 MethodInvoker m = () => { textBox1.Text = "Modified text"; };
InvokeSafe(m);
  

Ответ №2:

Распространенная причина заключается в том, что вы пытаетесь получить доступ к данным, доступным для потока пользовательского интерфейса, из вашего фонового потока. Убедитесь, что вы не получаете доступ к данным через потоки.

Вам нужно опубликовать более подробную информацию.

Ответ №3:

Сообщение довольно четкое. Вызовы между потоками могут сделать приложение очень нестабильным, поэтому оно недопустимо.

Вот некоторая документация о том, как это решить: