Visual Studio зависает при получении данных от Arduino через последовательный порт - PullRequest
0 голосов
/ 02 февраля 2019

Visual Studio получает неизвестные данные последовательного порта от Arduino.Я отправляю данные с «9594» в начале данных, чтобы получить правильные данные.Что я могу сделать для зависания при отладке?

Я использую Visual Studio 2010 Express.Я мог видеть данные в текстовом поле непрерывно, но пока я начинаю получать отлаженную форму, зависает, но я не могу выполнить никаких других операций (например, нажав кнопку и т. Д.), Я попытался изменить время чтения данных, тайм-аут последовательного интерфейса и т. Д. Но программа все еще зависает.

private void button19_Click(object sender, EventArgs e)
    { 
        while (true)
        {
            try
            {
                string x = serialPort1.ReadLine();


                if (x.IndexOf("9594") >= 0)
                {

                    x = x.Remove(0, 4);           
                    double y = double.Parse(x); 
                    string z = textBox10.Text;
                    double zd = double.Parse(z);
                    textBox12.Text = x;
                    if (y < zd)
                    {

                        power_limit_turn_off_plugs();

                    }
                    else if (y > zd)
                    {
                        turn_to_last_state_of_plugs();
                    }
                }
            }

            catch (TimeoutException)
            { }
        }
}

Последовательный выход подобен (сторона Arduino):

95940.00
95940.00
95945.51
95945.51
95948.93
95948.93
95945.51

1 Ответ

0 голосов
/ 03 февраля 2019

Ожидается, так как вы блокируете поток пользовательского интерфейса бесконечным циклом while.Вы должны выполнять свои длительные задачи в другом потоке.

Имейте в виду, что, как только вы попытаетесь получить доступ к элементам управления формы из другого потока, вы столкнетесь с InvalidOperationException.

В этом посте объясняетсямного.https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls

Просто установите CheckForIllegalCrossThreadCalls = false в начале, затем, когда вы узнаете больше, сделайте правильное исправление, которое объяснено в ссылке выше.

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