.net BackgroundWorker的IsBusy属性何时更改?

.net BackgroundWorker的IsBusy属性何时更改?,.net,backgroundworker,.net,Backgroundworker,BackgroundWorker组件有一个IsBusy标志。在执行RunWorkerASync时,此标志设置为True。当RunWorkerASync完成时,或者当RunWorkerCompleted完成时,IsBusy标志将在RunWorkerCompleted执行之前,在RunWorkerCompleted结束时设置为False。假设您想从另一个函数中检索BackgroundWorker操作的结果,如下所示: Dim MyResult = "Not Set" Sub Foo()

BackgroundWorker
组件有一个
IsBusy
标志。在执行
RunWorkerASync
时,此标志设置为True。当
RunWorkerASync
完成时,或者当
RunWorkerCompleted
完成时,
IsBusy
标志将在
RunWorkerCompleted
执行之前,在
RunWorkerCompleted
结束时设置为False。假设您想从另一个函数中检索
BackgroundWorker
操作的结果,如下所示:

Dim MyResult = "Not Set"

Sub Foo()

    DoSomeStuff()

    RunWorkerASync()

    'Wait for worker
    While Worker.IsBusy
        Wait()
    End While

    'Use result
    'This won't work because MyResult hasn't been
    'set yet by the RunWorkerCompleted handler
    'Will Print "Not Set", unless, by a timing quirk,
    'RunWorkerCompleted has enough time to execute
    'Before using its result.
    Print MyResult
End Sub

Sub RunWorkerASync()
    e.Result = "Result has been set"
End Sub

Sub RunWorkerCompleted()
    MyResult = e.Result 'Worker's output
End Sub

“在RunWorkerCompleted执行之前”-这不是真的,请参阅: