如果后台工作程序是后台线程,我怎么能执行这段代码



研究发现Background Workerbackground thread,但当我运行以下代码时,即使退出主过程,Background Worker仍然运行到最后。这个功能不是为foreground threads保留的吗?

代码:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Run background worker
        BackgroundWorker1.RunWorkerAsync()
        'Display exit message
        MsgBox("Main procedure exited")
    End Sub
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        'Wait 10 seconds
        Threading.Thread.Sleep(10000)
        'Modify some numbers
        Dim variable = 3
        variable -= 1
        'Display exit message
        MsgBox("Background thread " & variable & " exited")
    End Sub
End Class

Form1_Load方法不是"主过程",所以在它的末尾显示的消息框实际上是一个谎言。这只是第一次显示表单时引发的Form.Load事件的事件处理程序方法。

"主过程"名为Main,在一个单独的文件中定义(实际上,在VB.NET中,它是由编译器自动生成的,默认情况下甚至不可见)。您可以在Microsoft的VB编程指南中找到有关Main方法的更多信息。

只要程序仍在运行,Main方法仍在运行。在Form1_Load事件处理程序方法完成后,Form1仍然在屏幕上,所以很明显您的程序还没有关闭。由于程序的主线程仍在运行,BackgroundWorker对象的后台线程仍在异步运行,就像您告诉它的那样。

相关内容

最新更新