Обновите индикатор выполнения, используя winforms c # - PullRequest
0 голосов
/ 20 апреля 2010

В моем модуле есть функциональность, где пользователь может сканировать количество последовательных портов в системе и когда пользователь нажимает кнопку «Автосканирование», код должен будет идти через каждый последовательный порт и отправить тестовое сообщение и ждать за ответ.

Я использую панель управления прогрессом, чтобы показать процесс автоматического сканирования. Для которого мне нужно передать значение «х» и «Y» в моем коде обновить бар. Как я могу передать значение, так как мой код уже в цикле foreach для получения последовательных портов.

Y = должно передавать значение общего количества последовательных портов X = должен пройти через каждый порт и передать значение

Надеюсь, мне ясно с требованием.

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string strAckData = "";

        foreach (SerialPort sp in comPortsList)
        {
            sp.Open();
            string sendData = "Auto scan";
            sp.Write(sendData);
            strAckData += "Connection live on port " + sp.ReadExisting() + "\n";
            sp.Close();

            double dIndex = (double)x; **//How to pass the value here ?**
            double dTotal = (double)y; **//How to pass the value here ?**
            double dProgressPercentage = (dIndex / dTotal);
            int iProgressPercentage = (int)(dProgressPercentage * 100);

            // update the progress bar
            backgroundWorker1.ReportProgress(iProgressPercentage);

        }
        richTextBox1.Invoke(new MethodInvoker(delegate { richTextBox1.Text = strAckData; }));
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ProgressBar.Value = e.ProgressPercentage;
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        StatusLabel.Text = "Auto Scan completed";
    } 

1 Ответ

1 голос
/ 20 апреля 2010

Количество портов можно узнать из переменной comPortsList. Тогда индекс - это просто вопрос увеличения переменной цикла:

double dTotal = (double)(comPortsList.Count);
double dIndex = 0;

foreach (SerialPort sp in comPortsList)
{
  // talk to serial port as at the moment

  dIndex = dIndex + 1;  // or ++dIndex to be more concise
  double dProgressPercentage = dIndex / dTotal;
  // etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...