У меня есть одна форма главного окна, и в этой форме у меня есть пользовательские элементы управления, которые представляют разные экраны в приложении. Я хочу получить доступ к дочерним элементам управления этого элемента управления. Есть кое-что, чего я не получаю ... иногда я получаю эту ошибку:
Cross-thread operation not valid:
Control 'lblText' accessed from a thread
other than the thread it was created on.
но иногда все работает нормально. Я не совсем понимаю, почему ошибка ... вероятно, что-то с внешним устройством (MEI BillAcceptor), который имеет событие (внутри класса Form1), который вносит изменения в элемент управления ... поэтому позвольте мне написать простой код ...
//user control
public partial class Screen2 : UserControl
{
public void changeValue(string txt)
{
lblText.Text = txt;
}
}
и метод changeValue вызывается из формы1 при возникновении определенного события ...
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BillAcceptor.SomeBillAcceptorEvent +=
new SomeBillAcceptorEventHandler(changeText);
}
private void changeText(object sender, EventArgs args)
{
_screen2.changeValue("some text");
}
}
Так что самое неприятное в том, что иногда все действительно работает ... Итак, мой вопрос: "Должен ли я использовать Invoke здесь?" или как мне решить эту проблему с меньшими изменениями в приложении ...