C# использовать дату из последовательного порта в основной программе - PullRequest
0 голосов
/ 08 февраля 2020

Мне нужно прочитать данные из COM-порта. Данные поступают из Arduino, их нужно проанализировать программой C# и выполнить определенные действия на хосте P C. Я могу читать данные, но только с бесконечным «пока верно» l oop. который блокирует форму и другие задачи для выполнения. Итак, в настоящее время это выглядит так:

while (true) {
                oneLine = myPort.ReadLine();
                this.Invoke(new EventHandler(display_data_Event));

                // TBD: add analysis of data from port
                // TBD: execute according to data from Arduino
            }

обработчик:

        private void display_data_Event(object sender, EventArgs e)
    {
        string curr_time = DateTime.Now.ToString("h:mm:ss tt");
        port_in_TextBox.AppendText(curr_time + "       " + oneLine + "\n");
    }

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

Как я могу использовать строку «в одну строку» только тогда, когда происходит событие, вместо «while true»? Я попытался вызвать функции из обработчика - я думаю, что это не удалось, потому что это другой поток. Так что, возможно, проблема в том, как разделить строку из одного потока в другой.

1 Ответ

0 голосов
/ 09 февраля 2020

Я потерян, вот основная программа: https://docs.microsoft.com/en-us/dotnet/api/system.io.ports.serialport.datareceived?view=netframework-4.8

Теперь вопрос в том, нужен ли вам один вход или много. Если первое, добавьте AutoResetEvent, чтобы основная программа была заблокирована, и чтение данных сигнализирует о ее разблокировке. Или, если есть много строк, добавьте свое «основное» действие в событие сразу после прочтения каждой строки.

...