如果已经打开,如何避免打开的Comport

时间:2012-04-03 17:07:50

标签: c# serial-port

我正在使用以下代码通过gsm调制解调器发送短信

for (int i = 0; i < 10; i++)
        {
            MSComm1.CommPort = 3;
            MSComm1.PortOpen = true;
            MSComm1.Output = "AT" + '\r' + '\n';
            Thread.Sleep(1000);
            MSComm1.Output = "AT+CMGF=1" + '\r' + '\n';
            Thread.Sleep(1000);
            MSComm1.Output = "AT+CMGS=" + '\"' + MobileNo + '\"' + '\r' + '\n';
            Thread.Sleep(1000);
            MSComm1.Output = MsgTxt + (char)26;
            Thread.Sleep(1000);
            MSComm1.PortOpen = false;
        }

我的问题是: 我想打开(MSComm1.CommPort = 3;)中的端口,只有它尚未打开。所以我不必像上面的循环那样一次又一次地为每个短信打开和关闭它

1 个答案:

答案 0 :(得分:2)

如果你使用过去十年设计的任何语言/框架,或者你希望你的应用程序在新的或新的机器/操作系统上运行,你应该放弃MSComm ActiveX控件。

相反,您可以使用.Net Framework中提供的SerialPort类:

using (var com3 = new SerialPort("COM3"))
{
    if (!com3.IsOpen) com3.Open();

    for (int ii = 0; ii < 10; ++ii)
    {
        com3.WriteLine("AT" + Environment.NewLine);
        com3.WriteLine("AT+CMGF=1" + Environment.NewLine);
        com3.WriteLine("AT+CMGS=\"" + 03152800485 + "\"" + Environment.NewLine);
        com3.WriteLine("Hello Kashif" + (char)26);
        Thread.Sleep(5000);
    }
    com3.Close();
}