我在C#中的接口滞后有问题。

由于我仍在学习,请在解释时耐心等待。

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

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

现在,我每秒轮询一次设备以获取数据,这需要在计时器对象中掩埋一些逻辑,以下是滴答之间发生的情况:


增值。
构造代表要发送到的命令的2个字符串
盒子(封装在函数中
编码命令
发送命令
清除字节数组
收到回复。


在事件处理程序中是否可能要进行过多的处理?每次我在轮询会话期间尝试移动窗口时,即在计时器运行时,都会遇到非常严重的输入滞后。

最佳答案

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

要解决此问题,您只需在后台线程上执行工作,然后在UI线程上更新UI。

.NET框架中有许多不同的计时器以不同的方式工作,您正在使用的计时器在同一线程上处理计时器事件,其他计时器在后台线程上处理。 Check this article out about the different timers

您也可以只使用当前计时器来调用BackgroundWorker组件以在后台线程上进行工作。这样做的主要好处是BackgroundWorker可以在后台线程上进行工作,但是会在UI线程上引发work complete事件,因此可以轻松更新UI,而不必担心您在哪个线程上。

关于c# - 如何减少C#中的接口(interface)滞后?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1236510/

10-14 19:30