如果Background Worker是后台线程,我怎么能执行这段代码呢?

时间:2013-07-22 05:44:24

标签: vb.net multithreading backgroundworker background-thread

研究我发现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

1 个答案:

答案 0 :(得分:2)

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

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

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