【问题标题】:Serial Port reading causes application freezing for a while - Do I need threading?串行端口读取导致应用程序冻结一段时间 - 我需要线程吗?
【发布时间】:2011-09-30 18:28:41
【问题描述】:

我在 C# 中获得了一些代码,用于读取 AT 命令兼容调制解调器的结果。 如果我开始读取整个应用程序的 COM 端口会冻结,直到收到数据。我想我应该使用线程,但我不知道如何?

        if (!serialPort1.IsOpen)
            serialPort1.Open();
        serialPort1.WriteTimeout = 5000;
        serialPort1.NewLine = "\r\n";
        serialPort1.WriteLine("AT#MON");
        serialPort1.NewLine = "\r\n";
        while (true) // Loop indefinitely
        {

            serialPort1.NewLine = "\r\n"; // Prompt
            string linee = serialPort1.ReadLine(); // Get string from port

            if (System.Text.RegularExpressions.Regex.IsMatch(linee, ("^xcqa:")))
            {
                textBox1.AppendText(System.Environment.NewLine);
            }
            if (System.Text.RegularExpressions.Regex.IsMatch(linee, ("^fkss:")))
            {
                textBox1.AppendText(System.Environment.NewLine);
            }
            if (System.Text.RegularExpressions.Regex.IsMatch(linee, ("ended"))) // Check string
            {
                break;
            }
            textBox1.AppendText(linee);
        }

【问题讨论】:

  • 难道没有一个事件可以用来处理从串口读取数据吗?
  • 这就是 SerialPort 有 DataReceived 事件的原因。它在工作线程上运行,您必须使用 Control.BeginInvoke()。
  • 感谢您的一切...我完全是 C# 的初学者 :-) 我找不到示例代码

标签: c# multithreading serial-port


【解决方案1】:

是的。您需要使用多线程。产生一个新线程将允许您的应用程序中的其他代码同时进行。为此,您的串行端口读取代码将需要自己的线程。阅读 C# 的多线程文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2010-09-20
    相关资源
    最近更新 更多