在一个Windows窗体应用程序中,在主窗体加载时,我设置了一个串口并开始读取它。目的是,当我在串口上接收到一些数据时,我想打开与数据相关的另一个窗体。
因此,我使用串口的DataReceived事件处理程序。
但是当我尝试在事件处理程序中打开一个表单时,它会给我一个InvalidOperationExeption错误,显示:"跨线程操作无效:从创建它的线程以外的线程访问控件'Main'。"
我尝试删除代码行:
有什么建议来解决这个问题吗?
因此,我使用串口的DataReceived事件处理程序。
void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string str = this.serialPort1.ReadLine();
if (!string.IsNullOrEmpty(str))
{
Main.Instance.customerData = new CustomerData(str);
Main.Instance.customerData.MdiParent = Main.Instance; //Exeption received at this point
Main.Instance.customerData.Disposed += new EventHandler(customerData_Disposed);
Main.Instance.customerData.Show();
}
}
但是当我尝试在事件处理程序中打开一个表单时,它会给我一个InvalidOperationExeption错误,显示:"跨线程操作无效:从创建它的线程以外的线程访问控件'Main'。"
我尝试删除代码行:
Main.Instance.customerData.MdiParent = Main.Instance;
,然后它可以正常工作。但是为了将其作为子窗体打开,也需要分配mdiparent。有什么建议来解决这个问题吗?