0

Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C#

SerialPort オブジェクトをプライベート変数として使用する、私が遊んでいる winforms アプリがあります。アプリケーションをコンパイルして実行すると、うまく機能します。また、ブレークポイントなしでデバッグ モードで実行しても機能します。ブレークポイントで停止してコードをステップ実行しようとすると、90% の確率で、次の詳細を含む「未処理の例外が発生しました」というダイアログが表示されます。

System.ObjectDisposedException は未処理でした Message="Safe ハンドルが閉じられました" Source="mscorlib" ObjectName="" StackTrace: at Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle) at System.Threading.EventWaitHandle.Set() at System. InnerException:

イライラするのは、シリアル関連のコードをまたぐ必要がないことです! 私はポートで何かをしなければなりませんでした。つまり、文字列を読み取り、文字列を操作し、2 つの数値を足し合わせてから、BANG を実行します。

繰り返しますが、これは、デバッグしない場合、またはブレークポイントなしでデバッグする場合に問題なく機能します。CLRが別のスレッドでSerialStreamを破棄するブレークポイントで停止することについて何かがあるようです。

これを引き起こす USB デバイスの改修に関する問題について、オンラインで多くのおしゃべりがあります。しかし、私は COM1 の内蔵マザーボード ポートを使用しています。

私は.NET 2.0でこの問題があったとは思わないので、それに戻らなければならないかもしれません...

コードを投稿する前に、アプリケーションをかなり単純化する必要がありますが、デバッガーでこのような動作を見たことがありますか?

本当にありがとう!

4

5 に答える 5

1

今朝も同じ問題がありました。驚いたことに、VS2008の[ツール]->[オプション]->[デバッグ]->[一般]で次のオプションを無効にすると、単に消えてしまいました。

  • 「例外アシスタントを有効にする」
  • 「.NETFrameworkのソースステッピングを有効にする」
  • 「プロパティと演算子のステップオーバー」
  • 「プロパティ評価およびその他の暗黙的な関数呼び出しを有効にする」

理由はわかりませんが、うまくいきました。

于 2008-11-19T15:42:47.173 に答える
1

アプリケーションからの応答が得られない (ブレークポイントで停止する) ため、ポートが OS によって閉じられている可能性があります。

于 2008-11-16T08:02:35.760 に答える
0

これが答えかどうかはわかりませんが、そのプロジェクトには間違いなく何かがありました。元々は 2.0 で書かれ、VS2008 によって 3.5 に変換されました。C#-Express 2008 で新しいプロジェクトを作成し、元のクラスを 1 つずつ追加しましたが、今では魅力的に機能します! 何が違うのかわからない。

于 2008-11-19T12:24:24.453 に答える
0

私もこれを持っています。これは、デバッガーの何らかのバグに違いありません。上記のアドバイスはうまくいきました。「プロパティ評価とその他の暗黙的な関数呼び出しを有効にする」を無効にします。

シリアル I/O を行うプロパティを持つクラスがあります。おそらくデバッガーは、マウスをその上に置いたときにプロパティ値を表示しようとしていて、デバッガースレッドからIOを実行していると思いました。しかし、そうではないようです。何が原因なのかさっぱりわかりません。

于 2008-12-15T23:59:52.573 に答える