Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 串口读取导致应用程序冻结一段时间-我需要线程吗?_C#_Multithreading_Serial Port - Fatal编程技术网

C# 串口读取导致应用程序冻结一段时间-我需要线程吗?

C# 串口读取导致应用程序冻结一段时间-我需要线程吗?,c#,multithreading,serial-port,C#,Multithreading,Serial Port,我用c#编写了一些代码,用于读取AT命令兼容调制解调器的结果。 如果我开始读取COM端口,整个应用程序将冻结,直到收到数据。我想我应该使用线程,但我不知道如何使用 if (!serialPort1.IsOpen) serialPort1.Open(); serialPort1.WriteTimeout = 5000; serialPort1.NewLine = "\r\n"; serialPort1.Writ

我用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);
        }

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


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


    是否存在可用于处理从串行端口读取数据的事件?这就是为什么串行端口具有DataReceived事件的原因。它在工作线程上运行,您必须使用Control.BeginInvoke()。感谢您所做的一切。。。我对C完全是初学者:-)我找不到示例代码。是否有一个事件可用于处理从串行端口读取数据?这就是为什么串行端口具有DataReceived事件。它在工作线程上运行,您必须使用Control.BeginInvoke()。感谢您所做的一切。。。我对C完全是初学者:-)我找不到示例代码