作者:glh3112259 | 来源:互联网 | 2023-09-02 17:49
C#中如何使用时间控件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
提问
为什么我用C#时间控件监听UDP数据时,界面是没有响应了呢?
我thread的线程就可以!
监听方法如下:
IPEndPoint pp=new IPEndPoint(IPAddress.Parse("127.0.0.1"),12345); UdpClient udp1=new UdpClient(pp); while(true) { IPEndPoint p=null; this.textBox2.Text=new UTF8Encoding().GetString(udp1.Receive(ref p)); }
解答
如果你用了TIMER控件并在里面加了上述方法,会出现这样的情况:
(假设你的TIMER的interval属性是1000,你的UDP的TIMEOUT是2000……)
TIMER被触发……
执行到了udp1.Receive(ref p));……
由于Receive是个同步等待的方法,程序会wait……
udp的超时是2000,但是到了1000ms后TIMER又一次被触发,结果就是udp1尚在等待Receive结束,你又调用了它一次= =
而正是因为Receive方法是同步等待的,所以你在Thread里运行时一次Receive没结束是一定不会跳回"while(true)"去再Recieve一次滴
C#时间控件监听超时的解决方法:
1.丢到你自己的线程里去,不要用timer;
2.把udp的超时属性改的比timer的interval短
看完上述内容,你们掌握C#中如何使用时间控件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程笔记行业资讯频道,感谢各位的阅读!