关于C#时间控件的提问与解答

开发 后端
本文将就C#时间控件监听UDP数据时,界面没有响应来讨论,作者提出疑问,由专家来进行解答。其中涉及UDP超时属性。

提问

为什么我用C#时间控件监听UDP数据时,界面是没有响应了呢?

我thread的线程就可以!

监听方法如下:

  1. IPEndPoint pp=new IPEndPoint(IPAddress.Parse("127.0.0.1"),12345);  
  2. UdpClient udp1=new UdpClient(pp);  
  3. while(true)  
  4. {  
  5.      IPEndPoint p=null;  
  6.      this.textBox2.Text=new UTF8Encoding().GetString(udp1.Receive(ref p));  
  7.    } 

解答

如果你用了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短

【编辑推荐】

  1. C#析构函数和构造函数的用法
  2. C#日期格式化的几种处理方法
  3. 浅谈C#泛型的用处
  4. 浅谈C#如何实现多继承
  5. C#实用基础教程
责任编辑:彭凡 来源: 百度知道
相关推荐

2009-08-06 18:31:57

C#相对路径绝对路径

2009-08-17 17:08:47

C#转义

2009-08-05 17:15:27

C#自定义按钮

2009-07-31 14:47:22

JavaScript函C#

2009-08-12 16:01:32

C#动态改变数据

2010-06-12 11:19:59

MySQL中文乱码

2009-08-03 11:37:36

C#日期时间控件

2009-08-06 16:05:09

GridView控件

2011-05-20 16:07:29

C#

2010-05-10 14:05:31

负载均衡器

2009-08-18 17:41:22

C# ListView

2009-08-11 14:45:41

C# DataGrid

2009-08-21 16:32:41

C#空格表示

2009-08-24 11:23:41

C# TimeLabe

2009-08-19 11:21:02

C# ListBox控

2009-08-11 15:46:15

C#日历控件

2009-08-26 17:28:48

C# DateTime

2009-07-31 13:48:09

C#时间转换

2009-08-14 14:19:50

Enhanced LiC#构建

2009-08-24 18:21:23

C# ListView
点赞
收藏

51CTO技术栈公众号