重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C#中如何使用时间控件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
10年的南县网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整南县建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“南县网站设计”,“南县网站推广”以来,每个客户项目都认真落实执行。
提问
为什么我用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#中如何使用时间控件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!