|
■No78196 (jinjin さん) に返信 > e.ToString() で例外をトレースしてみました。 > > catch (Exception e) > { > System.Diagnostics.Debug.Write(e.ToString()); > Write ではなく、WriteLine にしないとメッセージの最後に改行がないので、くっついちゃいますよ。
> > 例外がスローされました: 'System.IO.IOException' (System.dll の中) > System.IO.IOException: 要素が見つかりません。 > > 場所 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) > 場所 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) > 場所 System.IO.Ports.SerialPort.Open() > 場所 ComPort通信.Connect() 場所 ComPort通信.cs:行 225
> 例外がスローされました: 'System.IO.IOException' (System.dll の中) > System.IO.IOException: 要素が見つかりません。 > > 場所 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) > 場所 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) > 場所 System.IO.Ports.SerialPort.Open() > 場所 ComPort通信.Connect() 場所 ComPort通信.cs:行 225
>スレッド 0x122c はコード 0 (0x0) で終了しました。
> 例外がスローされました: 'System.IO.IOException' (System.dll の中) > System.IO.IOException: セマフォがタイムアウトしました。 > > 場所 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) > 場所 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) > 場所 System.IO.Ports.SerialPort.Open() > 場所 ComPort通信.Connect() 場所 ComPort通信.cs:行 225
>スレッド 0x5e0 はコード 0 (0x0) で終了しました。
> 例外がスローされました: 'System.IO.IOException' (System.dll の中) > System.IO.IOException: デバイスが接続されていません。 > > 場所 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) > 場所 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) > 場所 System.IO.Ports.SerialPort.Open() > 場所 ComPort通信.Connect() 場所 ComPort通信.cs:行 225
> 'ホニャララ.vshost.exe' (CLR v4.0.30319: ホニャララ.vshost.exe): 'Settings.dll' が読み込まれました。シンボルが読み込まれました。
> 例外がスローされました: 'System.Exception' (ホニャララ.dll の中) > スレッド 0x2784 はコード 0 (0x0) で終了しました。 > という感じで都合5個の例外が出ているようです。
最後の部分は、ユーザーコードなのでよくわからないですけど。
> メッセージ部だけ切り出すと。 > > 例外がスローされました: 'System.IO.IOException' (System.dll の中) > > System.IO.IOException: 要素が見つかりません。 > > System.IO.IOException: セマフォがタイムアウトしました。 > > System.IO.IOException: デバイスが接続されていません。 > > ときて、次のRetry Openで成功します。 > 上記例外は、1度に1つずつ出ていて何度かリトライした後最終的に成功するという形でしょうか?
一応。。。 SerialPort.GetPortNames() メソッドでは判断がつかないのですよね? Name プロパティに含まれるか?で判断しているので、わざわざWMI使わないとダメなの? というのがちょっと気になりました。
まぁ例外発生とは直接関係はないのですが、WMIを経由せずに済むならそれに越したことはないだろうな。。。 ということで。一応確認まで。
|