Запуск и отображение прогресса нескольких синхронных операций - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть приложение WinForms, и я пытаюсь добавить возможность запуска нескольких операций на основе данных, введенных в таблицу данных. Операции должны выполняться синхронно, чтобы следить за их успешным завершением, прежде чем вставлять строку в БД, чтобы указать, что операция прошла успешно. У меня также есть обработчик событий состояния для операции, который будет возвращать процент выполнения операции.

Пока что я использую потоки для запуска операций, однако он обновляет прогресс только одного из потоков. Когда этот поток завершен, он переходит к следующему и будет работать до конца. Мне бы хотелось, чтобы они оба или более работали одновременно и могли сообщать о состоянии каждого из них.

Я в основном перебираю строки в сетке и использую значения там для создания нового класса, который я создал. Затем я создаю поток и запускаю подпрограмму для выполнения операции с новым объектом. Я думаю, что я могу быть близко, поскольку я знаю, что все они запускаются, но они просто бегут один за другим, а не все сразу.

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 03 сентября 2010

Если они работают один за другим, то звучит так, будто они не работают как потоки. Я предлагаю убедиться, что ваши потоки работают асинхронно.

Затем, когда они запускаются одновременно, вы можете использовать делегатов, чтобы отчитываться перед основным процессом и показывать ваш прогресс.

Вы можете использовать это:

 Delegate Sub delShowProgressOne(ByVal Row As Integer, ByVal Percent As Double)
  Sub ShowProgressOne(ByVal Row As Integer, ByVal Percent As Double)
    If Me.InvokeRequired Then
      Me.Invoke(New delShowProgressOne(AddressOf ShowProgressOne), Row, Percent)
    Else
      DGV.Rows(Row).Cells("Progress").Value = Percent
    End If
  End Sub

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

Надеюсь, эта информация поможет.

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