3

私はクライアントサーバーアプリケーションを持っており、データの送受信とクライアントのリッスンに従来のソケットとスレッドを使用しています。

アプリケーションは正常に動作しますが、ランダムな時間の後にObjectDisposedExceptionが発生します。

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'MainForm'.
   at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
   at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
   at System.Windows.Forms.Control.Invoke(Delegate method)

そのコードはクライアントのソケットスレッドから呼び出され、Invoke()メソッドを使用してUIスレッドでコードを実行します。

フォームを手動で破棄したり、Close()を使用したりしない(ユーザーが[閉じる]ボタンをクリックするとフォームが閉じられる)ことはないと確信しているので、何が原因で破棄されるのかわかりません。

編集:フォームを閉じるときに例外はスローされません-完全にランダムに発生します。

4

2 に答える 2

1

メソッドをオーバーライドDisposeしてそこにブレークポイントを入れてみましたか? コールスタックはおそらく、それが破棄されている理由/場所を示します。

于 2010-05-30T10:55:01.207 に答える
0

私は同様の問題を抱えていました。フォームを非表示にして、フォームを閉じたり破棄したりしていませんでした。

フォームが破棄される根本的な原因は、実際にはフォームを強制的に閉じる [キャンセル] ボタンの DialogResult が原因であり、破棄は暗黙的でした。

これを克服するために、フォームから DialogResult beaviour を削除しました。

于 2013-04-08T12:53:27.580 に答える