2010-06-14 4 views
1

조건 있을지C#에서 메서드 실행을 지연시키는 방법?

if (sendSMS(Convert.ToInt32(DLComportNo.SelectedItem.Text), TxtDriMob.Text, 
TxtCliDet.Text) && sendSMS(Convert.ToInt32(DLComportNo.SelectedItem.Text), 
TxtCliMob.Text, TxtDriDet.Text)) 
{ 
    // I am inserting details to my db 
} 

이가 내 sendSMS 방법은 내가에서 브레이크 포인트를 사용할 때

private bool sendSMS(int portNo, string mobNo, string details) 
{ 
    try 
    { 
     SerialPort SerialPort1 = new SerialPort(); 
     SerialPort1.PortName = "COM" + portNo.ToString(); 
     SerialPort1.BaudRate = 9600; 
     SerialPort1.Parity = Parity.None; 
     SerialPort1.DataBits = 8; 
     SerialPort1.StopBits = StopBits.One; 
     SerialPort1.RtsEnable = true; 
     SerialPort1.DtrEnable = true; 
     SerialPort1.Encoding.GetEncoder(); 
     SerialPort1.ReceivedBytesThreshold = 1; 
     SerialPort1.NewLine = Environment.NewLine; 
     SerialPort1.Open(); 

     SerialPort1.Write("AT" + SerialPort1.NewLine); 
     Sleep(500); 
     SerialPort1.Write("AT+CMGF=1" + SerialPort1.NewLine); 
     Sleep(500); 

     SerialPort1.Write("AT+CMGS=" + (char)34 + mobNo + (char)34 + 
           SerialPort1.NewLine); 
     Sleep(1000); 
     SerialPort1.Write(details + (char)26); 
     Sleep(2000); 

     SerialPort1.Close(); 

    } 
    catch 
    { 

    } 
    return true; 
} 

은 무엇 일어나는 것은, 다음과 같습니다 내 sendSMS 난 내 출력 (IE)를 얻을 모두 메서드가 실행되고 메시지가 제대로 전송됩니다 ...하지만 내 중단 점을 제거했을 때 if 문에서 메서드가 실행되지만 첫 번째 메서드에서 메시지가 전송되고 두 번째 메서드에서 메시지가 전송되지 않습니다 .... 어떤 제안?

답변

1

각 명령 다음에 직렬 포트에서 장치의 확인을 기다리는 것이 좋습니다. 절전 모드로 잠그기 만해도 장치가 명령을 처리했으며 추가 입력이 가능하다는 보장이 없습니다. 명령을 보낸 후에 장치에서 (직렬 포트를 통해) 응답을 읽어야 명령이 예상대로 처리되었는지 확인해야합니다. 일반적으로 "AT"명령을 받아들이는 장치는 명령이 처리되면 새 행에 "OK"를 반환합니다. 오류가 반환되면 오류 조건에 따라 false를 반환하거나 throw해야합니다. 기기의 사양을 확인하거나 단말기를 통해 기기와 상호 작용하여 기기의 반응을 확인합니다.

SerialPort class에있는 MSDN 설명서는 직렬 포트에서 읽는 방법을 보여줍니다.

또 다른 방법은 보낼 메시지 모음을 취하는 방법을 리팩토링하는 것입니다. 이렇게하면 동일한 SerialPort 인스턴스를 열고, 설정하고, 보내고있는 각 메시지에 대해 닫는 것이 아니라 더 쉽게 사용할 수 있습니다.

+0

귀하의 의견을 얻을 수 없습니다 .. 좀 더 설명 해주십시오 .. –

+0

@ Pandiya, 나는 내 대답을 조금 정교하게했다. 아직 질문이 있으면 알려주세요. –

+0

동일한 포트를 사용하여 메소드를 리팩터링하는 샘플 코드를 게시 할 수 있습니까? –

관련 문제