2014-02-07 3 views
0

안녕하세요. 우선 이미 보았지만이 문제에 대한 도움을 얻는 데는 도움이되지 않는 것 같습니다. 이벤트 C에 여분의 변수 전달 #

은 기본적으로 내 응용 프로그램이 사용하는 시리얼 포트로부터 수신 된 데이터에 이벤트 화재 :

sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); 

을 그리고 난 데이터를 사용하여 수신 처리 : 내가 확인란이 그에게 추가 년

private static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    try 
    { 
     string inData; 
     bool passed; 
     SerialPort spRead = (SerialPort)sender; 
     inData = spRead.ReadLine(); 
     TwinCat comm = new TwinCat(); 
     passed = comm.passiButton(inData); 
     if (passed) comm.disposeComm(); 
     else MessageBox.Show("Error Closing Comm"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

컨트롤 및 체크 확인란이 선택되어 있는지 여부에 따라 데이터로 무엇을 할 수 변경할 수 있도록 즉 체크 또는 그렇지 않은 ie 즉 bool 변수를 전달하고 싶습니다.

이벤트에서 bool 변수를 전달할 수 없으므로 조건이 아직 구현되지 않았습니다.

+0

나는 이미 해당 게시물을 보았다하지만 난 그 정보를 구현하는 방법을 알아낼 수 없습니다 알고 크로스 스레드 GUI 작업을 방지 할 수 있습니다. 누구든지 내 코드를 도와주세요. – Combinu

답변

1

CheckBoxSerialPort이 같은 형태에있는 ...

이벤트 핸들러에서 static 키워드를 제거한 다음 DataReceived 이벤트 처리기에서 안전하게 비 GUI 변수에 액세스 가정.

// member variable 
// update the value during the checkbox's CheckChanged event handler 
private bool isChecked; 

private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    ... 

    if (isChecked) 
    { 
     // do something special 
    } 

    ... 
} 

편집 : 변경은

+0

이제 런타임 오류가 발생합니다. Control.Invoke는 별도의 스레드에서 생성 된 컨트롤과 상호 작용하는 데 사용해야합니다. – Combinu

+0

'Checked' 속성은 GUI/제어 작업 만 읽고 있습니까? 그렇다면'isChecked'라는 새로운 멤버 변수를 추가하고,'CheckBox.CheckChanged' 이벤트 핸들러를 추가하고, 그 핸들러에서 isChecked 값을 설정합니다. 그런 다음이 스 니펫에서 다음을 확인하십시오.'if (isChecked) {...} ' – jglouie

+0

알았어. 알았어. 감사!! – Combinu