Исследование Я узнал, что 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
Путаница поднялась от просмотра видео по темам с примерами на консольном приложении. Думаю, теперь вопрос в том, почему в приложениях формы VB.Net есть фоновые и фоновые потоки, если в конце до тех пор, пока открыто, приложение будет выполнять поток в любом случае. Единственное, о чем я могу думать, - это выполнить какую-то функцию, которая должна быть завершена, если пользователь закрывает приложение или нет, например обновление. –
Приложения @Uriel Console работают совсем по-другому, чем приложения Windows. В приложении Windows (WinForms или WPF не имеет значения) поток «переднего плана» - это тот, который отображает и управляет пользовательским интерфейсом и запускает цикл сообщений]. Фактически, это * единственный * поток, с которым вы можете взаимодействовать с пользовательским интерфейсом. Вы должны прыгать через обручи (например, метод 'Control.Invoke'), чтобы сделать это из фонового потока. Фоновые темы * не будут запускаться при закрытии приложения (т. Е. Выходящий поток переднего плана). –