Получить ответ от функции BackgroundWorker, когда завершите - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь получить ответ от функции BackgroundWorker, однако он нажимает кнопку Return до запуска RunWorkerCompleted.Как только код нажимает «Thread_Load», он запускает Return.

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

Спасибо за вашу помощь.

Я пытался использовать 'Пока ответ = ничего', но код просто зависает.

В основной форме

    Private Sub RibbonButton3_Click(sender As Object, e As EventArgs) Handles RibbonButton3.Click
        Dim NewCall As New TestThreads_SQL_Class
        Dim reply As String
        reply = NewCall.Thread_Load()
        MessageBox.Show(reply)
    End Sub

Тогдав TestThreads_SQL_Class

Imports System.ComponentModel




Public Class TestThreads_SQL_Class
    Public Class ArgumentType
        Public _a As Int32
        Public _b As Int32
    End Class

    Dim WithEvents BackgroundWorker1 As New BackgroundWorker
    Dim reply As String = Nothing


    Public Function Thread_Load()
        ' Create the argument object.
        Dim args As ArgumentType = New ArgumentType With {
            ._a = 5,
            ._b = 6
        }
        ' Start up the BackgroundWorker1. & Pass argument object to it.
        BackgroundWorker1.RunWorkerAsync(args)
        Return reply
    End Function


    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        ' Do some time-consuming work on this thread.
        System.Threading.Thread.Sleep(1000)
        ' Get argument.
        Dim args As ArgumentType = e.Argument
        ' Return value based on the argument.
        e.Result = args._a * args._b
    End Sub


    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        ' Called when the BackgroundWorker is completed.
        reply = (e.Result.ToString())
    End Sub

End Class

1 Ответ

0 голосов
/ 07 июня 2019

Спасибо вам обоим за ответы.Ниже работает отлично.

    While Me.BackgroundWorker1.IsBusy
        ' Keep UI messages moving, so the form remains 
        ' responsive during the asynchronous operation.
        Application.DoEvents()
    End While
...