研究发现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
Form1_Load
方法不是"主过程",所以在它的末尾显示的消息框实际上是一个谎言。这只是第一次显示表单时引发的Form.Load
事件的事件处理程序方法。
"主过程"名为Main
,在一个单独的文件中定义(实际上,在VB.NET中,它是由编译器自动生成的,默认情况下甚至不可见)。您可以在Microsoft的VB编程指南中找到有关Main
方法的更多信息。
只要程序仍在运行,Main
方法仍在运行。在Form1_Load
事件处理程序方法完成后,Form1
仍然在屏幕上,所以很明显您的程序还没有关闭。由于程序的主线程仍在运行,BackgroundWorker
对象的后台线程仍在异步运行,就像您告诉它的那样。