自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于C#時(shí)間控件的提問(wèn)與解答

開(kāi)發(fā) 后端
本文將就C#時(shí)間控件監(jiān)聽(tīng)UDP數(shù)據(jù)時(shí),界面沒(méi)有響應(yīng)來(lái)討論,作者提出疑問(wèn),由專家來(lái)進(jìn)行解答。其中涉及UDP超時(shí)屬性。

提問(wèn)

為什么我用C#時(shí)間控件監(jiān)聽(tīng)UDP數(shù)據(jù)時(shí),界面是沒(méi)有響應(yīng)了呢?

我thread的線程就可以!

監(jiān)聽(tīng)方法如下:

  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控件并在里面加了上述方法,會(huì)出現(xiàn)這樣的情況:
(假設(shè)你的TIMER的interval屬性是1000,你的UDP的TIMEOUT是2000……)

TIMER被觸發(fā)……

執(zhí)行到了udp1.Receive(ref p));……

由于Receive是個(gè)同步等待的方法,程序會(huì)wait……

udp的超時(shí)是2000,但是到了1000ms后TIMER又一次被觸發(fā),結(jié)果就是udp1尚在等待Receive結(jié)束,你又調(diào)用了它一次= =

而正是因?yàn)镽eceive方法是同步等待的,所以你在Thread里運(yùn)行時(shí)一次Receive沒(méi)結(jié)束是一定不會(huì)跳回"while(true)"去再Recieve一次滴

C#時(shí)間控件監(jiān)聽(tīng)超時(shí)的解決方法:

1.丟到你自己的線程里去,不要用timer;

2.把udp的超時(shí)屬性改的比timer的interval短

【編輯推薦】

  1. C#析構(gòu)函數(shù)和構(gòu)造函數(shù)的用法
  2. C#日期格式化的幾種處理方法
  3. 淺談C#泛型的用處
  4. 淺談C#如何實(shí)現(xiàn)多繼承
  5. C#實(shí)用基礎(chǔ)教程
責(zé)任編輯:彭凡 來(lái)源: 百度知道
相關(guān)推薦

2009-08-06 18:31:57

C#相對(duì)路徑絕對(duì)路徑

2009-08-17 17:08:47

C#轉(zhuǎn)義

2009-08-05 17:15:27

C#自定義按鈕

2009-07-31 14:47:22

JavaScript函C#

2009-08-12 16:01:32

C#動(dòng)態(tài)改變數(shù)據(jù)

2010-06-12 11:19:59

MySQL中文亂碼

2009-08-03 11:37:36

C#日期時(shí)間控件

2011-05-20 16:07:29

C#

2009-08-06 16:05:09

GridView控件

2010-05-10 14:05:31

負(fù)載均衡器

2009-08-11 14:45:41

C# DataGrid

2009-08-18 17:41:22

C# ListView

2009-08-19 11:21:02

C# ListBox控

2009-08-24 11:23:41

C# TimeLabe

2009-08-21 16:32:41

C#空格表示

2009-08-11 15:46:15

C#日歷控件

2009-08-26 17:28:48

C# DateTime

2009-07-31 13:48:09

C#時(shí)間轉(zhuǎn)換

2009-08-14 14:19:50

Enhanced LiC#構(gòu)建

2009-08-24 18:21:23

C# ListView
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)