外部イベントで写真を撮り、イーサネットで接続された外部ハードウェアから送信する、適切に機能する 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#に精通していません。