問題タブ [objectdisposedexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1001 参照

c# - オブジェクトの破棄された例外を解決する

こんにちは、どこでこの例外をキャッチするか、解決するか教えてください。受信ハンドルを閉じるたびに、まだデータを受信して​​いる場合、このエラーが発生します。

0 投票する
1 に答える
250 参照

winforms - DelphiPrismで破棄されたオブジェクトにアクセスできません

私はDelphiPrismforMonoでプログラミングしています。ウィンドウフォームがクラス内で宣言され、次のようにコンストラクターでインスタンス化されているにもかかわらず、既に開いているウィンドウフォームと閉じているウィンドウフォームを開いた後、このエラー「破棄されたオブジェクトにアクセスできません」が表示され続けます。

宣言されているクラスは次のとおりです。

インスタンス化または作成されるコンストラクターは次のとおりです。

ボタンイベント内でフォームが表示または開かれる方法は次のとおりです。

frはグローバル変数によく似たクラスの一部であるウィンドウフォームであるため、ウィンドウフォームを開いた後に閉じるとウィンドウフォームが破棄されるのはなぜですか。簡単にアクセスできるようにプログラム全体がシャットダウンされるまで、メモリに保持されませんか?

更新: onFormClosing内で、フォームを非表示にして機能しているように見えますが、フォームを再度開こうとすると、以前と同じ例外が発生します。「破棄されたオブジェクトにアクセスできません」。

0 投票する
2 に答える
24711 参照

c# - System.ObjectDisposedException でプログラムがクラッシュする

プログラムで奇妙な問題が発生しています。Windowsフォームアプリケーションを開発しています。Visual Studio (F5) でデバッグすると完全に正しく動作しますが、実行可能ファイルを実行するとクラッシュし、「mscorlib.dll で 'System.ObjectDisposedException' 型の未処理の例外が発生しました」というメッセージが表示されます。

この例外をキャッチするためにトップレベル (最も外側の関数) に try/catch を配置しようとしましたが、それでもプログラムはクラッシュします。ここで何が欠けていますか?

問題の場所を確認するためにコード全体をアップロードする必要があったため、コードをアップロードしませんでした。

0 投票する
1 に答える
366 参照

wcf - 切断されたWCFチャネルでのObjectDisposedExceptionsの処理

何らかの理由で切断されたWCFチャネルでメソッドが呼び出されると、ObjectDisposedExceptionが発生します。

これは通常の操作では発生しないはずですが、何らかの理由で発生した場合は、「サービスが接続されていないため操作に失敗しました」などのエラーをユーザーに表示することで、例外を適切に処理できるようにしたいと思います。

問題は、アプリ全体の例外ハンドラーで一般的な破棄された例外を取得するだけなので、WCFがそれをスローしたかどうかを判断する方法がありません。

これを回避するために、現在、すべてのサービスメソッド呼び出しをtry / catchでラップし、グローバルハンドラーが処理できるカスタム通信例外としてObjectDisposedExceptionを再スローするラッパークラスがあります。これは、私がなくてもできる定型文の負荷です。

WCFが例外をスローしたかどうかを判断する方法はありますか?

乾杯

0 投票する
2 に答える
6299 参照

c# - .NET SerialPort を閉じた後の ObjectDisposedExecption

COM1 に接続されたデバイスと通信するために .NET 4 SerialPort オブジェクトを使用しています。

デバイスの操作が完了したら、SerialPort で Close を呼び出します。私は Dispose とは呼びませんが、ここでは Close と Dispose は同義だと思います。

通常、これで問題なく動作します。

ただし、しばらくしてから次の例外が発生することがあります (私が確認した時間は 5 ミリ秒から 175 ミリ秒の範囲です)。

このスタックには私のコードはありません。

http://blog.zachsaw.com/2010/07/serialport-ioexception-workaround-in-c.htmlを見つけましたが、そこでの解決策は機能しませんでした。さらに調べてみると、問題はIOExceptionではなくObjectDisposedExceptionです。

USB-to-serial デバイスが取り外されたときに観察される問題に関する投稿が多数ありますが、COM1 はオンボードであるため、予期せず消えることはありません。

ここの問題も私の問題ではありません。SerialPort は使用中は保持され、デバイスとの通信が終了したときにのみ閉じられます。(完了すると、デバイスはそれ以上データを送信しない状態になります。)

SLaks、 への入り口にブレークポイントを設定して、SafeHandle.Dispose処分すべきではないものをいつ処分するかを判断することを提案していますが、私はそのブレークポイントを何十回も打ちます。シリアル デバイスの使用が終了すると、への 1 回の呼び出しで 3 回呼び出されSerialPort.Close、残りの約半分は GC スレッドにあります。残りは、WPF UI 要素に関連しているようです。

私は今途方に暮れています。ここからどこへ行けばいいですか?

どの SafeHandle がどのオブジェクトに属しているかを判断する方法はありますか?
SerialPort を適切にシャットダウンする必要がある Close 以外の呪文はありますか?

0 投票する
1 に答える
961 参照

c# - XNA SpriteBatch.End()ObjectDisposedException

スローされた例外でいくつかの問題が発生しています。以下は、XNAループからの描画メソッドです。

そして、これがグラフィックシステムからの描画方法です。

グラフィックコンポーネントは、graphicsSystemのList<>に保存されます。問題の一部は、私がプロジェクト間で作業していることかもしれないと思っています。上記のトップループはXNAプロジェクトにあります。2番目の描画方法は、私が作成したゲームライブラリにあります。そして最後に、component.draw()メソッドの実際の実装は、私が取り組んでいる現在のゲームに固有の3番目のプロジェクトにあります。グラフィックシステムのテクスチャフィールドは、グラフィックシステムの構築時にContent.Load関数から初期化されます。

私はいくつかの異なることを試みました。spritebatch.beginとspritebatch.endをグラフィックシステムに移動しましたが、それでも例外が発生しました。グラフィックシステムのコンポーネントリストが空の場合、例外は表示されません。

スコープがあるプロジェクトから別のプロジェクトに移動するときに、ロードされたテクスチャがスコープから外れるかどうかはわかりませんが、そうではないと思います。単一のプロジェクトでも同じ種類のセットアップが機能しましたが、他の場所でコードの一部を使用するために複数にリファクタリングしていました。消えていくテクスチャのどこにもdisposeとは呼んでいないので、狩りを始めるかどうかさえ本当にわかりません。

これが明確でない場合は、私に知らせてください。詳しく説明します。

0 投票する
1 に答える
694 参照

entity-framework - EntityFramework 共有 dbcontext を確実にクエリできません

複数のリポジトリ間で 4 つの DbSet を持つ単純な DbContext を共有しようとしています。各リポジトリはこの基本クラスから継承しています

質問: これはリポジトリ間の接続を共有する適切な方法ですか?

さまざまなリポジトリにアクセスすると、単体テストで断続的なエラーが発生します。リポジトリ メソッド GetEntityByName から例外がスローされる

テスト メソッド Tests.Service.TestDelete が例外をスローしました: System.ObjectDisposedException: ObjectContext インスタンスが破棄されたため、接続を必要とする操作には使用できなくなりました。

データベースが既に存在する場合、コードは期待どおりに実行されます。GetEntityByName(string name) の実装を次の非パフォーマンス コードに変更した場合にも機能します

質問: ここで何が起こっているのですか?

テストを実行したときにデータベースが存在する場合、エラーはまったく発生しないことに注意してください。

ティア、jt

0 投票する
0 に答える
229 参照

dispose - コントロールの破棄後の ObjectDisposedException

私が質問しようとしていることは、現実世界で必要とされていますが、簡単にするために、問題をこれに要約しました。

  • C# Windows フォーム アプリケーション プロジェクトを作成する
  • フォームにテキストボックスとボタンを追加します。
  • テキスト ボックスに Leave イベントを追加します。
  • ボタンに Click イベントを追加します。

このコードで

プロジェクトを実行し、カーソルをテキスト ボックスに置きます。ボタンをクリックして終了します。

テキストボックスを離れると、ボタンが Disposed になりますが、ボタンの Click イベントは、処理されるのを待っているテキストボックスの Leave イベントの後ろに座っています。しかし、テキスト ボックスがなくなったため、ObjectDisposedException が発生します。

だから、....問題は、ボタンを安全に破棄できるように、キューに入れられたイベントをどのように削除するかです。

0 投票する
3 に答える
1333 参照

c# - ObjectDisposedExceptionをスローするC#/WPFアプリ。スタックトレースをキャッチまたは取得できないのはなぜですか?

C#WPF UIアプリがあり、それを閉じると、常にWindowsアプリケーションのクラッシュダイアログが表示されます(「UIDemoで問題が発生したため、閉じる必要があります。」)。

エラーレポートは、それがSystem.ObjectDisposedExceptionであることを示しています。これは、破棄されたオブジェクトでメソッドが呼び出されていることを示しています。それは結構です、私はその部分を理解しています。

そして、私はそれを修正したいと思います。 ろくでなしでスタックトレースを取得できません。

その例外は、次のすべてを回避しています。

  • 私のDispatcherUnhandledExceptionハンドラー
  • Exitイベントハンドラーのコンテンツ全体を囲むtry/catch
  • そのWindowsアプリケーションで[デバッグ]をクリックすると、クラッシュダイアログが閉じて何もしません
  • VisualStudioのデバッグモードでアプリを実行すると機能するように見えますが、奇妙なことに、この方法ではクラッシュしないように見えるため、トレースはありません

私が続けなければならないのは、WindowsがMSに送信するエラーレポートの不可解な内容だけです。これらの16進数のメモリのダンプは、実際にはそれほど有用ではありません。

誰かが私がそのくそったれの痕跡を得る方法を知っていますか?

0 投票する
3 に答える
808 参照

c# - C#/ MVVMアプリケーションで説明できないObjectDisposedExceptionsを解決するにはどうすればよいですか?

私は最初のMVVMアプリケーションを作成しました。アプリケーションを閉じると、ObjectDisposedExceptionによってクラッシュが発生することがよくあります。クラッシュは、アプリウィンドウが消えた直後に、アプリケーションが停止すると表示されます。

スタックトレースを取得するのは困難でしたが(他の質問を参照)、最終的にスタックトレースが完全にC#ライブラリ(kernel32!BaseThreadStart、mscorwks!Thread、mscorwks!WKSなど)に含まれていることがわかりました。

さらに、このクラッシュには一貫性がありません。私の最後のチェックアウトと再構築の後、それは起こりませんでした...しばらくの間。それから戻ってきました。それが起こり始めると、私が「クリーン」にして再構築しても、それは起こり続けます。ただし、ワイプアンドチェックアウトによってしばらく停止することがあります。

私が考えていること:

私のViewModelsを破棄するとき、GarbageCollectorは何か面白いことをしていると思います。私のViewModelBaseクラスデストラクタには、デストラクタが呼び出されたときにログに記録するWriteLineがあり、4つのViewModelのうち、2つまたは3つだけが破棄され、チェックアウトによって異なるようです(たとえば、私のもので実行すると、一貫して繰り返されますシーケンスですが、私の同僚は、異なるオブジェクトが配置された異なるシーケンスを見ています)。

スタックトレースには私のコードの呼び出しが含まれていないので、それは、破棄されたオブジェクトのメソッドを呼び出しているのは私のコードではないことを意味すると思います。そのため、CLRは馬鹿げていると思います。

これは意味がありますか?GCの一貫性を保つ方法はありますか?これは赤いニシンですか?

役立つ可能性のあるその他の詳細:
すべてのビューとViewModelは、App.xaml.csファイルのアプリケーションのStartupイベントハンドラーで作成されます。同じハンドラーがViewModelsをDataContextsに割り当てます。これが正しいMVVMプラクティスであるかどうかはわかりませんが(私が言ったように、私の最初のMVVMアプリ)、なぜそれが悪い動作を引き起こすのかわかりません。

必要に応じてコードを貼り付けることができます。