私は非常に奇妙な動作を1つのフォームで発生するようです。Loadハンドラからフォームを閉じる
基本的に私はForm
のインスタンスを作成していて、Show()
を呼び出してフォームをノンブロッキングで表示しています。そのフォームのLoad
イベントハンドラでは、特定の状況下でthis.Close()
を呼び出すロジックがあります。これによりフォームが閉じられますが、クライアントコード内のフォームShow()
はObjectDisposedException
をスローします。システムでSystem.Windows.Forms.Form.CreateHandleでSystem.Windows.Forms.Control.CreateHandleで
()
()
:次のように説明ObjectDisposedExceptionからスタックトレースがあります.Windows.Forms.Control.get_Handle()System.Windows.Forms.Controlで
は
System.Windows.Forms.ContainerControl.FocusActiveControlInternal()System.Windows.Forms.Form.SetVisibleCoreで
(ブール値)で
.Show()
...など。これは私が見ているものです
起こる:
Control.Show()
が私のフォームが起動される- と呼ばれる
- 内部、
FormLoad
イベントハンドラが呼び出され - と呼ばれる方法そのうち私は
this.Close()
OnFormClosing
の方法はcaですlledDispose
が私のフォームで呼び出されると、すべてのそれはだユーザーは
制御し、その後、どこかControl.Show()
方法の終わりに向かって、それはフォームへのハンドルを取得しようとすると呼ばれるFormClosing
イベントハンドラオブジェクトは破棄されてマークされているため、例外をスローします。
私の本当の疑問は、なぜ私は例外なく、私が持っている他のすべてのフォームで同じことをすることができますか?それはGCの問題ですか?私はthis.Close()
の直後にGC.Collect()
コールを入れようとしましたが、違いはありません。私が言ったように、それはフォームの変数の範囲など、子のユーザーコントロールに関係なく、このフォーム上の時間の100%、他の場所では決して発生します。
アイデア?
残念ながら私はWindowsの開発者をもうやらないが、これは正しいと思う。ありがとう! – LoveMeSomeCode
.Net2.0で動作しません – Vadim