2012-02-16 139 views
2
私は、スタックトレースを持つエラーを得た

... System.ObjectDisposedException:破棄されたオブジェクトにアクセスできません - どうしてですか?

System.ObjectDisposedException: Cannot access a disposed object. 
Object name: 'Button'. 
at System.Windows.Forms.Control.CreateHandle() 
at System.Windows.Forms.Control.get_Handle() 
at System.Windows.Forms.Control.PointToScreen(Point p) 
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
at System.Windows.Forms.Button.WndProc(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

このエラーを生成するコードがある

....

Friend Sub GoHome(ByVal sender As Form) 
    InTransit = True 
    sender.Close() 
    fMain.Show() 
End Sub 

私はただの順序を切り替えるときにエラーを与えるものではありません最初のケースのために、それはエラーを与え、後者の場合にはそれがない理由理由.SHOWと.close方法は

Friend Sub GoHome(ByVal sender As Form) 
    InTransit = True 
    fMain.Show() 
    sender.Close() 
End Sub 

あなたは私を教えてくださいことはできますか?

+0

もっと興味深い情報...。 私はアプリケーションが(Citrixによって)仮想化されている場合にのみ発生します 同じコンピュータで実行されると、決して起きません。 コードにメッセージボックスが含まれている場合、エラーは発生しません。 このコードはエラーなしで正常に動作します... 友達サブGOHOME(フォームとしてByVal送信者) InTransit = Trueの のMsgBox(「任意のメッセージ」) sender.Close() fMain.Show() End Subの – rai

答えて

0

この場合、senderfMainは同じオブジェクトですか?

sender.Closeに電話をすると、fMain.Closeが効果的に呼び出され、Closeメソッドはそのオブジェクトを裏目に処分します。その後、fMain.Showを呼び出すと、あなたが処分したオブジェクト、つまりエラーが発生した場合に呼び出されます。

か、あるいは...

たぶんsenderfMain上の子コントロールの1つである

sender.Closeに電話をかけ、子コントロールを破棄します。 fMain.Showを呼び出して、の何かを実行しようとします。子コントロールはfMainに属します。このエラーは、処理したばかりの子コントロールを使用してその特定の操作を実行しようとしたときに発生します。

関連する問題