2012-03-07 49 views
1

我正在开发一个管理人员流量的应用程序。应用程序有一个主要的形式来显示谁去和1个形式注册卡。 我没有问题从串口读取数据。我的问题是当从主窗体转到注册表并使用串行端口并返回到主窗体时,发生此错误:以多种形式从串口读取

直到创建窗口句柄后才能在控件上调用Invoke或BeginInvoke。

我的代码是在这里:

void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    try 
    { 
     if (RFIDActive) 
     { 
      SerialPort sp = (SerialPort)sender; 
      RFIDSerial = sp.ReadLine(); 
      this.Invoke(new EventHandler(ShowID)); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

和:

private void ShowID(object sender, EventArgs e) 
{ 
    //Some Code to display personnel data 
} 
+0

你真的需要在这里调用吗? ShowID是否被其他事件注册?你使用ShowID的发件人和e参数吗? – MPelletier 2012-03-07 11:47:43

+0

No.I不使用发件人和电子邮件。我测试一下,没有区别使用和不使用调用方法。但仍然我的问题没有解决时,其他形式之间切换 – 2012-03-07 12:03:30

+1

该错误自己说话。您试图针对无效句柄调用方法。在你做一个之前,你需要验证是否需要一个'Invoke'。 – 2012-03-07 12:41:00

回答

0

尝试用这个,

public delegate void GetData(string receivedData); 

void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    try 
    { 
     if (RFIDActive) 
     { 
      SerialPort sp = (SerialPort)sender; 
      RFIDSerial = sp.ReadLine(); 
      this.Invoke(new GetData(ShowID),RFIDSerial); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

和:

private void ShowID(string RFIDSerial) 
{ 
    //Some Code to display personnel data 
} 

希望它有帮助,

问候。