0

したがって、基本的には、指定されたシリアル ポート (デバイス: USB 経由で接続され、シリアル ポートとしてマップされたバーコード スキャナー) をリッスンするバックグラウンドで実行されているコンソール アプリケーションがあります。添付された SerialDataReceivedEventHandler は想定どおりに機能します。ただし、コンピューターがスタンバイ/休止状態になり、再アクティブ化されるとすぐに、明らかにデータが送信されなくなります (SerialDataReceivedEventHandler はトリガーされません)。SerialPort オブジェクトを確認すると、すべて問題ないようです (同じ属性、同じイベント ハンドラー、接続がまだ開いている)。とにかく、接続が(数時間後に)タイムアウトしているように見えることにも気付きました。

繋がり

...
{
  SerialPort serialPort = new SerialPort(port);
  serialPort.BaudRate = 9600;
  serialPort.Parity = Parity.None;
  serialPort.StopBits = StopBits.One;
  serialPort.DataBits = 8;
  serialPort.Handshake = Handshake.None; // tried RequestToSend as well, no difference

  serialPort.DataReceived += new SerialDataReceivedEventHandler(MySerialPortHandler);

  serialPort.Open();

  ...
}

static void MySerialPortHandler(object sender, SerialDataReceivedEventArgs e)
{
  SerialPort serialPort = (SerialPort)sender;
  string inData = serialPort.ReadExisting();

  ...
}
4

1 に答える 1

1

電源モードが変更されたときにリッスンするロジックをアプリケーションに追加しました。

Microsoft.Win32.SystemEvents.PowerModeChanged += OnPowerModeChanged;

サスペンド時に SerialPort を閉じてクリーンアップし、復元時に接続を再確立しました。

于 2012-09-19T18:58:56.500 に答える