Чтение последовательного порта на некоторое время приводит к зависанию приложения - нужно ли многопоточность? - PullRequest
1 голос
/ 30 сентября 2011

Я получил код на 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);
        }

1 Ответ

1 голос
/ 30 сентября 2011

Да. Вам нужно использовать многопоточность. Создание нового потока позволит другому коду в вашем приложении выполняться одновременно. Для этого вашему коду чтения последовательного порта потребуется собственный поток. Читайте документацию по многопоточности для C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...