2009-12-02 4 views
0

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

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

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

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

ответ

2

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

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

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

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.

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

Смежные вопросы