0

2 つのスレッド (メイン スレッドとセカンダリ スレッド) を使用するアプリケーションを閉じると、クロス スレッド例外が発生することがあります。何が起こっているのかと思うと、セカンダリ UI スレッドがまだ実行されている間にメイン UI スレッドが破棄されており、セカンダリ スレッドが UI スレッドで何かを呼び出すことがあるため、クラッシュしています。

FormClosingイベントのセカンダリ スレッドを手動で閉じる必要はありますか?

情報をありがとう。

4

3 に答える 3

1

マルチスレッド Windows アプリケーションで推奨されるアプローチはMethod Invocation、別のスレッドで作成されたコントロールを直接操作する代わりに使用することです。この方法では、Cross Thread Exception. たとえば、テキスト ボックスのテキストを次のように設定できます。

form1.BeginInvoke(new MethodInvoker(()=>textbox1.text = "Hello!"));

詳細については、http: //msdn.microsoft.com/en-us/library/ms171728 (v=vs.85).aspx を参照してください。

于 2013-09-21T17:56:43.490 に答える
1

セカンダリ スレッドを手動で閉じる必要がありますか?

いいえ、はい。

いいえ、セカンダリ スレッドがバックグラウンド スレッドの場合。セカンダリ スレッドでIsBackgroundプロパティを検査/設定できます。実行中のフォアグラウンド スレッドがなくなると、すべてのバックグラウンド スレッドは CLR によって自動的に停止されます。たとえば、すべての ThreadPool スレッドはバックグラウンド スレッドです。

はい、ただし、セカンダリスレッドで重要なタスクを実行し、突然停止したくない場合です。その場合、適切なロジックを実装してセカンダリ スレッドを停止する必要があります。

于 2013-09-21T18:22:37.213 に答える