0

C# のメイン フォーム クラスとサイド クラスがあります。サイドクラスのインスタンスを作成し、そのインスタンスからそのクラスのメソッドを呼び出しています。そのメソッドは新しいスレッドを開始します。現在、複数のインスタンスを作成し、それぞれのメソッドを呼び出しています。したがって、複数のスレッドが開始されます。これで、スレッドに関連付けられたメソッドから出るときにスレッドが確実に閉じられるように、サイドクラスにメソッドを実装しました。ユーザーがメイン フレーム ウィンドウの [X](閉じる) ボタンを突然クリックした場合、そのサイド クラス内にあるスレッドを処理する方法がわかりません。

PS - サイドクラスのインスタンスは、メイン フォーム クラスのメソッド内でインスタンス化されます。そのため、廃棄時にはインスタンスを持っていないので、インスタンスを停止できます。

4

2 に答える 2

1

メインウィンドウを閉じてアプリケーションを終了する場合は、サイドクラスのワーカースレッドでIsBackgroundをtrueに設定するだけで作成できます。そのように:

    var newThread = new Thread(DoWork) {IsBackground = true};
    newThread.Start();

ただし、「メイン」ウィンドウを閉じることがアプリケーションの終わりではない場合、メインウィンドウはインスタンス化されたサイドクラスへの参照の配列を保持する必要があります。次に、各サイドインスタンスにフラグを破棄/設定して、スレッドを停止する必要があることを通知する必要があります(これを行う方法はあなた次第です。サイドクラスで定期的にチェックされるフラグが適切な場合があります)。この呼び出しは、「メイン」ウィンドウのOnCloseで発生するはずです。

于 2012-12-03T10:22:56.030 に答える
0

アプリケーションの終了時に閉じる BackGroundWorkers にサイドスレッドを設定できます。
または、form.Closing イベントで、それぞれの join() メソッドを呼び出します。
これにより、スレッドが終了するまでアプリケーションを待機させることができます。

于 2012-12-03T08:29:24.050 に答える