#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:
Сообщение довольно четкое. Вызовы между потоками могут сделать приложение очень нестабильным, поэтому оно недопустимо.
Вот некоторая документация о том, как это решить: