温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中如何使用时间控件

发布时间:2021-07-07 15:53:06 来源:亿速云 阅读:231 作者:Leah 栏目:编程语言

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#中如何使用时间控件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI