1

研究我发现这Background Worker是一个background 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
4

1 回答 1

2

Form1_Load方法不是“主程序”,因此您在其末尾显示的消息框实际上是一个谎言。Form.Load这只是 event 的事件处理程序方法,在您的表单首次显示时引发。

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

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

于 2013-07-22T05:48:13.803 回答