2

WPF アプリケーションを作成しました。このアプリケーションでは 2 つのスレッドが実行されています。

  1. 最初のスレッドは、ポート 40010 で TCP パケットを非同期的にリッスンし、データを MSMQ にプッシュします。
  2. MSMQ からの 2 番目のスレッド ポップ データ

ウィンドウの閉じるボタンをクリックしてアプリケーションを閉じると、エラーは表示されません。しかし、アプリケーションを再度起動すると、例外がスローされます。

Unable to start Listrner : Only one usage of each socket address 
    (protocol/network address/port) is normally permitted

PC を再起動すると、最初は正常に動作しますが、アプリケーションを閉じると再び動作しません

4

1 に答える 1

6

スレッドを殺してはなりません。

あなたがすべきことは、彼らが終了するための良い方法を提供することです. アプリケーションを閉じるときに、いくつかの変数を設定する必要があります。

volatile bool shouldClose;

スレッド内でその変数を使用して、次のパッケージをポップする前に言い、そこで無限ループにブレーキをかけます。

メイン アプリケーションに関しては、スレッドが終了するまで待機する必要があります。

volatile キーワードについては、ドキュメントを参照してください。

于 2013-01-10T07:25:54.293 に答える