【问题标题】:How to delay execution of a method in c#?如何在 C# 中延迟方法的执行?
【发布时间】:2011-03-03 12:53:56
【问题描述】:

我有这个 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 中的两个方法语句已执行,但来自第一种方法的消息被发送,而不是来自第二种方法....有什么建议吗?

【问题讨论】:

    标签: c# conditional if-statement


    【解决方案1】:

    当然,您似乎应该在每个命令后从串行端口读回以等待设备的确认。只是进入睡眠状态并不能保证设备已经处理了您的命令并准备好接受额外的输入。发送命令后,您应该(通过串行端口)读取设备的响应,以确认它已按预期处理您的命令。通常,接受“AT”命令的设备将在处理完命令后在新行上返回“OK”。如果它返回错误,您应该根据错误条件抛出或返回 false。检查您设备的规格或尝试通过终端与其交互,看看它是如何响应的。

    SerialPort class 上的 MSDN 文档说明了如何从串行端口读取数据。

    请注意,另一种选择是重构您的方法以获取要发送的消息集合。这样可以更轻松地重用相同的 SerialPort 实例,而不是为您发送的每条消息打开、设置和关闭它。

    【讨论】:

    • @Pandiya,我详细说明了我的答案。如果您仍有疑问,请告诉我。
    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多