我们有一个正常工作的 C# Windows 窗体应用程序来拍摄外部事件的照片,从通过以太网连接的外部硬件发送。现在它应该由浏览器通过 Web 界面而不是 Forms.WebBrowser 控件使用。
所以我添加了一个最小的网络服务器,在一个线程中运行:
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”-Page 启动与之前相同的过程(在旧的 IEBrowserControl 中),显示下一页,初始化相机,启动外部设备,发送事件,相机在正确的时间拍摄. 到这里就跟以前一样了……
但是来自 Canon-SDK 的事件“Camera_SDKProgressCallbackEvent”(EDSDK.ObjectEvent_DirItemRequestTransfer = 0x00000208)未发送(或识别),图片仍在相机上且未下载。
清除它:与主窗口的 WebBrowser-Control 一起使用的同一程序工作正常 - 事件被调用并且图片也被下载。
我认为这是一个消息循环问题,但我不太熟悉 C# 来查找错误。