1

外部イベントで写真を撮り、イーサネットで接続された外部ハードウェアから送信する、適切に機能する C# Windows フォーム アプリケーションがあります。現在は、Forms.WebBrowser コントロールではなく、Web インターフェイスを介して Broswser で使用する必要があります。

そこで、スレッドで実行する最小限の Web サーバーを追加しました。

private void WebServerThread(int port)
{
  try
  {
    //start listing on the given port
    IPAddress localAddr = IPAddress.Parse("127.0.0.1");
    tcpIpListener = new TcpListener(localAddr, (int)port);
    tcpIpListener.Start();
    //start the thread which calls the method 'StartListen'
    Thread th = new Thread(new ThreadStart(StartListen));
    th.Start();
  }
  catch (Exception e)
  {
    ...
  }
}
public void StartListen()
{
  while (bServerRunning)
  {
    ...
    Socket mySocket = tcpIpListener.AcceptSocket();
    ...
    data = getHtmlPageFromSequencer(dataFromClient);
    SendToBrowser(data, ref mySocket);
    ...
  }
}

「StartWorkAndTakePictures」ページを開くと、以前と同じプロセスが開始されます (古い IEBrowserControl で)。次のページが表示され、カメラが初期化され、外部デバイスが開始され、そのイベントが送信され、カメラが正しい時間にショットを撮ります。 . ここまでは元通り…

しかし、Canon-SDK からのイベント「Camera_SDKProgressCallbackEvent」(EDSDK.ObjectEvent_DirItemRequestTransfer = 0x00000208) は送信 (または認識) されず、写真はまだカメラ上にあり、ダウンロードされていません。

クリアするには: メイン ウィンドウの WebBrowser コントロールで使用される同じプログラムが正常に動作します。イベントが呼び出され、画像もダウンロードされます。

メッセージループの問題だと思いますが、エラーを見つけるのにC#に精通していません。

4

2 に答える 2

0

解決:

「Application.DoEvents();」を追加 外部ハードウェアからコマンドを受信して​​カメラをトリガーするループで、私の問題を解決します。

于 2014-12-03T09:04:03.380 に答える