我有一个主窗口窗体,在该窗体中,我有代表应用程序中不同屏幕的自定义控件。我想访问这个控件的子控件。有些东西我没有在这里......有时我会收到这个错误:
跨线程操作无效: 从线程访问的控件“lblText” 除了创建它的线程。
但有时一切正常。我不完全理解为什么会出现错误......可能是外部设备(MEI BillAcceptor)有一个事件(在Form1类内)对控件进行更改......所以让我写一个简单的代码......
//user control
public partial class Screen2 : UserControl
{
public void changeValue(string txt)
{
lblText.Text = txt;
}
}
当特定事件发生时,从 form1 调用方法 changeValue...
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 吗?” 或者我如何通过对应用程序的较少更改来解决这个问题......