Как отложить выполнение метода в c #? - PullRequest
1 голос
/ 14 июня 2010

У меня есть условие if,

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мой вывод (то есть) оба метода выполняются и сообщения отправляются должным образом ... Но когда я удалил свою точку останова, оба метода в операторе if выполняются, но отправляется сообщение из первого метода, а не из второго метода.... Есть предложения?

1 Ответ

1 голос
/ 14 июня 2010

Конечно, похоже, что вы читаете данные с последовательного порта после каждой команды, чтобы дождаться подтверждения от устройства.Простое переключение в спящий режим не является гарантией того, что устройство обработало вашу команду и готово к дополнительному вводу.После отправки команды вы должны прочитать ответ устройства (через последовательный порт), чтобы убедиться, что оно обработало вашу команду, как ожидалось.Обычно устройства, которые принимают команды «AT», возвращают «OK» в новой строке после обработки команды.Если он возвращает ошибку, вы должны выбросить или вернуть false в зависимости от условия ошибки.Проверьте спецификации вашего устройства или попробуйте взаимодействовать с ним через терминал, чтобы увидеть, как оно реагирует.

Документация MSDN для SerialPort класса иллюстрирует, как читать с последовательного порта.*

Обратите внимание, что другой альтернативой может быть рефакторинг вашего метода для получения коллекции сообщений для отправки.Это упростит повторное использование одного и того же экземпляра SerialPort, а не его открытие, настройку и закрытие для каждого отправляемого сообщения.

...