Показывать панель прогресса / диалоговое окно ожидания при получении последовательных данных

#c# #winforms #user-interface #serial-port

#c# #winforms #пользовательский интерфейс #последовательный порт

Вопрос:

Как я могу показать индикатор выполнения (не процент, а просто бесконечную строку) или диалоговое окно ожидания во время выполнения действия в _DataReceived ?

например:

 private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                while (sp.BytesToRead > 1)
                {
                    string line = sp.ReadLine().Trim();

                    if (line == "EOC")
                    {
                        //finish
                    }
                    else
                    {
                        //string data = sp.ReadExisting();
                        _serialBuffer.Enqueue(line);
                    }
          }

 }
  

Ответ №1:

Просто добавьте индикатор выполнения, установите его Style ProgressBarStyle.Marquee равным, чтобы он указывал, что он не дает процент. Теперь увеличьте его значение следующим образом: (Я предполагаю, что этот код находится в a Form , в противном случае, если вы используете a BackgroundWorker , используйте его ReportProgress метод)

 private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                try
                {
                    while (sp.BytesToRead > 1)
                    {
                        string line = sp.ReadLine().Trim();

                        if (line == "EOC")
                        {
                            //finish
                            this.progressBar1.Visible = false;
                        }
                        else
                        {
                            //string data = sp.ReadExisting();
                            _serialBuffer.Enqueue(line);
                            if (this.progressBar1.Value < 100)
                                this.progressBar1.Value  ;
                            else
                                this.progressBar1.Value = 0;
                        }
              }

     }