私は自分で作成していないコードを調べており、アプリケーションがクラッシュする原因を理解しようとしています。
おそらく、リソースの処理方法とスレッドの管理方法にかかっていると思います。
メインの親スレッドは、新しいアプリケーション層クライアント(TCPMonitor)を作成し、次にTCPソケット通信(TCPListen)を処理する別のクラスを作成します。このクラスは、新しいTCPソケットクライアントとそのソケット上の読み取りネットワークストリームを作成する新しいスレッドループを生成し、同期ブロッキングRead()を呼び出します。
ただし、ネットワークエラー接続が発生した場合、例外はTCPListenスレッドループでキャッチされ、イベントが所有クラスTCPMonitorに戻されます。次に、TCPMonitorは、アクティブなTCPListenインスタンスを保持しているかどうかを確認し、保持している場合はDispose()を呼び出して、インスタンスをNullに設定します。
この時点で、TCPListen Read()はまだ確実にブロッキング呼び出しにありますか?その場合、親スレッドからDisposeを呼び出すと、子スレッドがブロッキング呼び出しから切り離され、ストリームとソケットが適切に破棄されるようにするにはどうすればよいですか?