【发布时间】:2011-02-01 02:31:22
【问题描述】:
我有一个 C# 应用程序,通过它我可以配置以太网摄像机的参数。相机充当服务器,应用程序充当客户端。
有 2 个用于通信的套接字,一个用于数据/命令通信 - 数据套接字(2 路通信)和另一个用于图像的套接字,相机通过图像套接字发送图像(单向通信)。只要有硬件触发,相机就会通过图像套接字发送图像(硬件触发何时到来是不可预测的)。
用户可以通过更改 GUI 中的值来配置相机。当用户更改参数时,应用程序通过命令套接字将命令和数据发送到相机并等待响应(接收超时为 5 秒)。相机接收命令并发送回响应。 GUI 收到它更新它成功更新的用户。
我已将图像套接字放在后台工作程序中。它内部的无限 while 循环不断轮询图像套接字中的图像,并且每当接收到图像时,它都会显示在 GUI 中(我使用委托来执行此操作)。一切都很好:)
现在,当触发器到达相机时,它会发送图像。在用户更改参数的同时,应用程序发送命令/数据并等待响应。只有在图像发送完毕后,相机才会收到命令。当应用程序等待命令响应时,后台工作程序(接收图像)没有运行。因此,UI 正在等待命令套接字中的响应,并且相机正在图像套接字中发送图像,并且 UI 没有接收到图像,因为后台工作程序没有运行。它变成了死锁,并且超时(5 秒)发生在命令套接字:(.
为什么socket等待超时时backgroundworker没有运行? 我用线程替换了后台工作人员,并将优先级设置为最高。错误(超时)频率已经下降,但偶尔会发生同样的问题。你们中的任何人都可以帮我解决这个问题并帮助我理解问题。
谢谢, 毗湿奴
【问题讨论】:
标签: c# backgroundworker tcpclient