如何减少C#中的接口延迟?

Dar*_*ar1 1 .net c# user-interface timer

我在C#中遇到接口延迟问题.

因为我还在学习,所以请耐心等待我解释.

我已将问题缩小到我的计时器对象.

基本上我的程序通过TCP/IP套接字查询设备并将其输出到屏幕上的文本框.

现在我每秒都在设备中查询数据,这需要将一些逻辑隐藏在计时器对象中,以下是在ticks之间发生的事情:

  1. 增加一个值.
  2. 构造2个字符串,表示要发送到框的命令(封装在函数中)
  3. 编码命令
  4. 发送命令
  5. 清除字节数组
  6. 收到回复.

这可能是在事件处理程序中进行的过多处理吗?每次我在轮询会话期间尝试移动窗口,即当计时器运行时,我的输入延迟非常糟糕.

Pet*_*vis 11

您正在使用的计时器正在Windows消息线程上执行.因此,在轮询运行时,Windows消息队列被阻止.执行太多处理不是问题,大多数情况下线程将等待TCP/IP响应.

要解决这个问题,您只需要在后台线程上完成工作,然后在UI线程上更新UI.

.NET框架中有一堆不同的计时器以不同的方式工作,您正在使用的计时器在同一个线程上处理计时器事件,其他计时器在后台线程上工作.查看这篇文章,了解不同的计时器.

您也可以使用当前计时器调用BackgroundWorker组件来完成后台线程的工作.这样做的主要好处是BackgroundWorker将在后台线程上完成工作,但会在UI线程上引发工作完成事件,这样就可以轻松更新UI而无需担心您所在的线程.