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.Loadeventの単なるイベント ハンドラー メソッドです。

「メイン プロシージャ」には名前が付けられMain、別のファイルで定義されます (実際、VB.NET では、コンパイラによって自動的に生成され、既定では表示されません)。メソッドの詳細についてはMain、Microsoft のVB プログラミング ガイドを参照してください。

Mainプログラムがまだ実行されている限り、メソッドはまだ実行されています。Form1_Loadイベント ハンドラー メソッドが終了した後Form1も、まだ画面に表示されているため、プログラムがまだ閉じられていないことは明らかです。そして、プログラムのメイン スレッドがまだ実行されているため、BackgroundWorkerオブジェクトのバックグラウンド スレッドは、あなたが指示したとおり、非同期で実行されています。

于 2013-07-22T05:48:13.803 に答える