問題タブ [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.
c# - Hibernate セッション ObjectDisposedException
Session が NHibernate によって破棄されたかどうかを確認する方法はありますか?
Session に独自の Finalizer と IDispoable の実装を持つラッパー クラスがありますが、クラスで自分で処理する前に Session が破棄されると、ObjectDisposedException を受け取ることになります。
クリーンアップコードをラップしたくありません
しかし、他の方法についてはよくわかりません。Session.IsOpen および Session.IsActive プロパティは、セッションが破棄されたことを確認するための信頼できる情報を提供していないようです。
完全なソースについては、 Assemblaで表示できます。
c# - Load ハンドラからフォームを閉じる
1 つのフォームでのみ発生するように見える非常に奇妙な動作があります。
基本的に私は のインスタンスを作成し、ノンブロッキングでフォームを表示するためForm
に呼び出しています。Show()
そのフォームのイベント ハンドラーには、特定の状況でLoad
呼び出されるロジックがいくつかあります。this.Close()
これはフォームを閉じますが、クライアント コードのフォームShow()
メソッドはObjectDisposedException
.
ObjectDisposedException からのスタック トレースは次のとおりです。
System.Windows.Forms.Control.CreateHandle()
で System.Windows.Forms.Form.CreateHandle()
で System.Windows.Forms.Control.get_Handle() で System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
で System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
で.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.Show()
...など。
これは私が見ているものです:
Control.Show()
と呼ばれる- 私のフォームが起動されました
OnFormLoad
メソッドが呼び出されますFormLoad
イベントハンドラーが呼び出され、その中で呼び出しますthis.Close()
OnFormClosing
メソッドが呼び出されますFormClosing
イベントハンドラが呼び出されますDispose
私のフォームとすべてのユーザーコントロールで呼び出されます
そして、Control.Show()
メソッドの最後のどこかで、フォームへのハンドルを取得しようとしますが、オブジェクトが破棄されているとマークされているため、例外が発生して例外がスローされます。
私の本当の質問は、例外なく他のすべてのフォームでこれとまったく同じことを実行できるのはなぜですか? それはGCの問題ですか?GC.Collect()
の直後に電話をかけてみましthis.Close()
たが、違いはありません。私が言ったように、子ユーザー コントロール、フォーム変数のスコープなどに関係なく、このフォームでは 100% 発生し、他の場所では決して発生しません。
何か案は?
c# - 開いたシリアルポートがC#アプリケーションをクラッシュさせる
コンピュータは、物理的なCOM1を介して測定デバイスに接続されています。私はシリアルポートを開き、私が生きていることをデバイスに伝え、時々デバイスがデータを送信するという単純なフォームを持っています。(数分ごと)
読み取り機能(機能します):
約1分後、アプリケーションがクラッシュします(デバッグ中であっても)。ObjectDisposedExceptionを報告します(基になるストリームに対して?)。このメッセージは、SafeHandleが閉じられたことを示しています。スタックstraceは以下のとおりです。
Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile、NativeOverlapped lpOverlapped、Int32&lpNumberOfBytesTransferred、Boolean bWait)at System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()at System.Threading.ThreadHelper.ThreadStart_Context System.Threading.ThreadHelper.ThreadStart()*でのThreading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)
何か案は?この問題は広く報告されていますが、通常、デバイスがPCから物理的に切り離されていることが関係しています。
.net - プロセスのシャットダウン中にObjectDisposedExceptionおよび同様の例外を処理しますか?
私のアプリケーションは通常10〜20のスレッドで実行されており、これらのスレッドはGUIにイベントを送信して、ほぼ毎秒特定のコントロールを更新します。
ユーザーがこれらの途中でアプリケーションを閉じると、これらのイベントに関連するすべての更新により、いくつかのランダムなクラッシュが発生します。主ObjectDisposedException
にとNullReferenceException
。
イベントは既にスローされていますが、.NET Frameworkによってまだ処理されていないため、キャンセルできる状態ではありません。
これを処理する最善の方法についてはよくわかりません。現在、私は例外を飲み込んでいます。
c# - オブジェクト廃棄例外
さて、私のコードには、以前は表示されなかったこの突然の問題があります。
次の行を示すObjectDisposedExceptionが発生します。
listBox1が破棄されているため、実行できません。それはどのように可能であり、実行する必要があることはありますか?
c# - TcpClient と NetworkStream の処理の問題
このコードを使用して、サーバーへの接続を処理し、クライアントからデータを読み取ります
これで、パラメーターとして渡されたストリームで ReceiveMessage メソッドが呼び出さBeginRead()
れますが、ObjectDisposedException が発生します。
Stream が不要になったときに stream.Dispose() を呼び出すことが解決策であることはわかっていますが、using
句の使用を維持できる解決策を本当に探しています。
ありがとう
exception-handling - vb.netでは、どのようにしてアプリケーションを強制終了し、エラーメッセージを抑制しますか?
ユーザーがアプリケーションを簡単に終了できるようにしたいと思います。ただし、何らかの理由で、ストップウォッチによって制御されている時間遅延のあるコードを実行しようとしています。試行するかどうかは関係ありませんが、エラーを停止してアプリケーションを強制終了し、実行中のすべてのスレッドを終了します。
Visual Basic Express 2008をSP1で使用しており、vb.netでコーディングしています。これはWinFormアプリケーションです。
Formname.Close()を使用してフォームを閉じるだけで、Application.Exit()も試しました。テキストボックスを参照しているスレッドを終了するIfThenステートメントを試し、Application.ExitThread()で終了しました。
私が得た:
ObjectDisposedExceptionは処理されませんでした
破棄されたオブジェクトにアクセスできません。オブジェクト名:'TextBox'。
この例外を処理する方法、または単に終了する方法を教えてください。
助けてくれてありがとう!
編集:明確にするために、これがどのように達成されるかは気にしません。アプリケーションの実行を停止し、エラーが発生しないようにしたいだけです。
.net - ObjectDisposedExceptionをスローするときに、objectNameとして何を渡す必要がありますか?
IDisposableを実装するとき、オブジェクトが破棄された後に呼び出されるべきではないすべてのメソッドがをスローする必要があることを理解していますObjectDisposedException
。しかし、例外のコンストラクターに渡される必要があるnameオブジェクトの標準は何ですか?
c# - ObjectDisposedException - GUI スレッドでストップウォッチを実行中
別のスレッドで実行されているストップウォッチがあり、ラベルの GUI スレッドを更新して時間の経過とともに表示します。プログラムを閉じると、フォーム GUIObjectDisposedException
を呼び出しthis.Invoke(mydelegate);
て、ストップウォッチの時間でラベルを更新するとスローされます。
どうすればこれを取り除くことができObjectDisposedException
ますか?
FormClosing イベントでストップウォッチを停止しようとしましたが、処理されません。
コードは次のとおりです。
c# - IDisposable, ObjectDisposedException, and threadsafe types
Is there any point in keeping track of the classic bool disposed
field on an otherwise threadsafe type for the purposes of conditionally throwing an ObjectDisposedException
at the beginning of all primary exposed methods?
I've seen this pattern recommended in a few places online but I'm not sure if the authors are using it correctly, so this question assumes that they are.
In such a scenario, it seems that the only way to ensure that the disposed
condition is true beyond the condition's evaluation is to use a synchronization mechanism such as lock() over the entire body of each exposed member including the Dispose(bool) method. Wouldn't this make the type effectively single-threaded again?
And if this is true, then there'd be no point in using it, and therefore you can't rely on the ObjectDisposedException mechanism in some IDisposable implementations - so then why would we EVER employ this mechanism if it isn't necessary?
====
I guess IDisposable and ObjectDisposedException just don't go together for thread-safe types.