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