2012-03-07 3 views
1

나는 인력의 관리를위한 응용 프로그램을 개발 중입니다. 응용 프로그램은 누가 가고 있는지를 보여주는 1 개의 메인 폼과 1 개의 tu 등록 카드를 가지고 있습니다. 직렬 포트에서 데이터를 읽는 데 문제가 없습니다. 내 문제는 메인 폼에서 폼을 등록하고 직렬 포트를 사용하여 메인 폼으로 되돌아 오는 에러입니다.많은 형태로 직렬 포트에서 읽기

윈도우 핸들이 생성 될 때까지 컨트롤에서 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의 보낸 사람 및 전자 메일 인수를 사용합니까? – MPelletier

+0

아니요. 보낸 사람과 전자 메일을 사용하지 않습니다. 나는 그것을 테스트하고, 사용하는 것과 사용하는 것과 차이가 없다. Invoke Method를 사용하지 않는다. 하지만 여전히 내 문제는 해결되지 때 다른 양식 사이의 전환 –

+1

오류 자체에 대한 이야기. 잘못된 핸들에 대해 메소드를 호출하려고합니다. 당신은 당신이 그것을하기 전에'Invoke '가 필요하다는 것을 검증 할 필요가 있습니다. –

답변

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 
} 

희망 하시겠습니까?

인사말.

관련 문제