精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

P2PMessageQueue的實際用法

開發 后端
本文介紹如何使用P2PMessageQueue(點對點消息隊列)。您將看到使用 P2PMessageQueue 類和相關類型的示例。

使用 P2PMessageQueue

本部分,您將看到使用 P2PMessageQueue 類和相關類型的示例。

注 當運行該示例時,可以選擇部署到 Windows CE 或 Pocket PC 2003 模擬器或設備。您可以在不進行修改的情況下在任一個平臺上調試該項目(并運行該應用程序)。運行示例時,看到的第一個屏幕提示您在閱讀器進程和發送器進程間進行選擇。無論選擇哪一個,都必須再次運行 .exe 文件(從 Program Files),然后選擇另一個選項。在 Pocket PC 平臺上,無論是使用模擬器還是設備,都必須重命名 .exe 文件(否則將激活現有的運行中應用程序)。

字符串的簡單 IPC 交換

首先使用托管進程將字符串傳入另一個 .NET Compact Framework 應用程序(也可以使發送方或接收方成為本機應用程序。有三種不同的方法用來讀取接收端的字符串(相同的原理也適用于發送端):阻塞、非阻塞以及事件驅動。

發送方和接收方的圖形用戶界面 (GUI) 在功能方面是自描述性的,如圖 3、4 和 5 所示。

 主窗體

圖 3. 主窗體

讀取端 

圖 4. 讀取端

當發送方單擊 Send 按鈕時,發送一個字符串(如文本框中輸入的),并可以選擇將該消息設置為警告消息(基于 Message Is Alert 復選框狀態)。發送方會阻塞,直到針對指定超時發送該消息(作為 combobox 中選擇的發送方)。位于該復選框下面的窗體底部顯示 Send 方法的返回結果,如圖 5 所示(即 OK)。

 發送 / 編寫端

圖 5. 發送 / 編寫端

這里再次使用了下載示例中的 Send 方法。

  1. private void cmdSend_Click(object sender, System.EventArgs e) {  
  2. Message msg;  
  3.  
  4. msg = new Message(  
  5. System.Text.Encoding.ASCII.GetBytes(txtSend.Text),   
  6. chkIsAlert.Checked);  
  7.  
  8.     ReadWriteResult rwr = mQue.Send(msg, mTimeout);  
  9.     lblSendResult.Text = rwr.ToString();  
  10. }  
  11.  

當閱讀器收到一個消息后,會將它顯示在列表視圖(第三列)中,并指出它是否是警告消息(第二列)。當成功接收到該消息時,第一列將始終顯示 OK。默認情況下,要接收一個消息,請單擊 Receive 按鈕;如果沒有消息要接收或者方法失敗,則列表視圖的第一列將指出原因(另兩列在該情形中不適用)。

在讀取和發送時,Queue Info 菜單(單擊 Info,然后單擊 Queue Info)會顯示有關隊列的數據。接收端上的 Mode 菜單(單擊 Read,然后單擊 Mode)有三個菜單項:On Demand Only、Event driven 和 Block a Thread。這些項用于配置該程序如何接收隊列外的消息。當您選擇一個模式后,它在示例應用程序的生命周期內不應該更改(開發人員可針對自己的設計進行混合與匹配)。以下幾個小節描述三種讀取模式。

按命令讀(對應于菜單 On Demand Only )

當接收方單擊 Receive 按鈕時,將執行以下方法。

  1. private void cmdReceive_Click(object sender, System.EventArgs e) {  
  2.     Message msg;  
  3.     msg = new Message();  
  4.  
  5.     // mTimeout is set by the end user by means of the GUI   
  6.     // to DON'T BLOCK (0), BLOCK (-1), or a real timeout value  
  7.     ReadWriteResult rwr = mQue.Receive(ref msg, mTimeout);  
  8.  
  9.     ListViewItem lvi;  
  10. if (rwr == ReadWriteResult.OK){   
  11.     bool isAlrt;  
  12.         string payload;  
  13.         isAlrt = msg.IsAlert;  
  14.  
  15.         byte[] bytes = msg.MessageBytes;  
  16.         payload = System.Text.Encoding.ASCII.GetString(  
  17.                 bytes, 0, bytes.GetLength(0));  
  18.  
  19.         lvi = new ListViewItem(  
  20.                 new string[]{rwr.ToString(), isAlrt.ToString(), payload});  
  21. }else{        
  22.         lvi = new ListViewItem(  
  23.                 new string[]{rwr.ToString(), @"n\a", @"n\a"});  
  24.     }  
  25.         listView1.Items.Add(lvi);  
  26.         listView1.Columns[2].Width = -2;}  
  27.  

事件驅動

事件驅動模型基本上意味著應用程序不會在任意時刻通過調用 Receive(例如,在計時器上或者要求用戶單擊 Receive 按鈕)來輪詢新消息,相反,應用程序會訂閱并捕獲來自 P2PMessageQueue 類的事件。要訂閱事件,需要使用正規的 .NET Compact Framework 委托習語(隊列的創建也不例外)。

  1. mQue = new P2PMessageQueue(  
  2.     isReader, txtQueueName.Text, maxL, maxM, out firstTime);  
  3. mQue.DataOnQueueChanged += new EventHandler(mQue_DataOnQueueChanged);  

引發該事件會調用方法,在本例中,只調用現有的接收方法。

  1. private void mQue_DataOnQueueChanged(object sender, EventArgs e) {  
  2.     this.Invoke(new EventHandler(this.cmdReceive_Click));  
  3. }  

阻塞線程

第三種從隊列進行讀取的方法是:創建一個線程,并使其阻塞以等待隊列的 Receive 方法。每次接收到消息時,應用程序都會處理它,然后再次循環回阻塞。以下是一些帶有解釋的示例代碼。

您會在某個地方創建并啟動以下線程。

  1. Thread t = new Thread(new ThreadStart(ThreadBlockedOnRead));  
  2. t.Start();  

該線程用下面的方法運行。(有關更多上下文,請下載代碼)。

  1. private void ThreadBlockedOnRead(){  
  2.     while (mMode == 2){ // Thread mode  
  3.         Message msg = new Message();  
  4.  
  5.         //Can actually omit a timeout for a true infinite block   
  6.         ReadWriteResult rwr = mQue.Receive(msg, 60 * 1000);  
  7.         if (rwr == ReadWriteResult.InvalidHandle || mMode != 2){  
  8.             return;  
  9.         }  
  10.                   
  11.         string body = rwr.ToString();  
  12.         if (rwr == ReadWriteResult.OK){  
  13.             byte[] bytes = msg.MessageBytes;  
  14.             string bytesAsString =   
  15. System.Text.Encoding.ASCII.GetString(  
  16. bytes, 0, bytes.GetLength(0));  
  17.             body += " | " + msg.IsAlert.ToString() + " | " + bytesAsString;  
  18.         }  
  19.  
  20.         MessageBox.Show(body, "To terminate this mode use the menu again");  
  21.     }  
  22. }      
  23.  

基本示例代碼至此結束。讀取隊列的三種方式也可以應用于通過隊列發送。當事件接收到信號時(即,隊列從已滿轉變為未滿),可進行阻塞和發送或嘗試在不進行阻塞的情況下隨時進行發送。在下一部分中,您將看到該設計如何允許隊列中的消息包含其他結構 — 而不僅僅是字符串。

注 在開發一個依賴事件信號來識別隊列從已滿轉變為未滿的應用程序時,需要在應用程序啟動時針對隊列執行一個初始寫入操作。如果不執行該初始寫入操作,則應用程序永遠不會開始寫入,因為該初始寫入操作必須經過特定地執行才能填充轉變為未滿狀態的隊列,因此,向事件發出信號以觸發針對該隊列的進一步寫入操作。

發送和接收更復雜的類型(不僅僅是字符串)

在前幾部分中,是在應用程序之間傳遞字符串,但如果可以將字符串與字節數組進行轉換,則還可以傳遞任何數據類型。因此,將該類型轉換為一個字節數組,在其中創建 Message 類,然后發送 Message。在接收端,檢索 Message,獲取字節數組,然后在其中創建該類型(例如,公開類型的 ToBytes 和 FromBytes 方法)。另一個方法是,從 Message 類繼承自己的類,并在其中實現轉換。很自然,如果您嘗試傳遞一個復雜的對象圖,則在類型與字節數組之間進行轉換會難得多。嘗試使用沒有源代碼的類型需要特別注意,因為您可能不具有對該類型的完整狀態(例如,私有成員)的訪問權,因此,可能無法準確地在類型與字節數組之間進行轉換。

出于簡單的目的,假設將一個 Int64 和一個 Boolean 從一個進程傳遞到另一個進程。將創建一個 CustomMessage 類,如下所示。

  1. public class CustomMessage : Message {  
  2.     public long TotalMemory;  
  3.     public bool AfterGC;  
  4.     public CustomMessage(){  
  5.         TotalMemory = 0;  
  6.         AfterGC = false;  
  7.     }  
  8.     public CustomMessage(long totMem, bool afterGarbCol){  
  9.         TotalMemory = totMem;  
  10.         AfterGC = afterGarbCol;  
  11.     }  
  12.     public override byte[] MessageBytes {  
  13.         get {  
  14.             byte[] b1 = BitConverter.GetBytes(TotalMemory);  
  15.             byte[] b2 = BitConverter.GetBytes(AfterGC);  
  16.  
  17.             byte[] b = new byte[9];  
  18.             Buffer.BlockCopy(b1, 0, b, 0, 8);  
  19.             Buffer.BlockCopy(b2, 0, b, 8, 1);  
  20.             return b;  
  21.         }  
  22.         set {  
  23.             TotalMemory = BitConverter.ToInt64(value, 0);  
  24.             AfterGC = BitConverter.ToBoolean(value, 8);  
  25.             base.MessageBytes = value;  
  26.         }  
  27.     }  
  28. }  

添加了兩個感興趣的字段(TotalMemory、AfterGC),重寫 MessageBytes 屬性以實現轉換(get 和 set 方法位于轉換發生的位置),然后添加一個默認的構造函數(這個參數化的構造函數是可選的)。

現在,如果要使用前面的示例,只需更改兩處地方:

發送消息時,要創建一個 CustomMessage,而不是將值賦給 TotalMemory 和 AfterGC。

  1. //msg = new Message(. . .); //Instead of this line  
  2. msg = new CustomMessage(GC.GetTotalMemory(false), false);  
  3. ReadWriteResult rwr = mQue.Send(msg, mTimeout);  

接收消息時,要創建一個 CustomMessage。

  1. //msg = new Message();  
  2. msg = new CustomMessage(); //msg still declared as Message  
  3. ReadWriteResult rwr = mQue.Receive(msg, mTimeout);  

然后,在 mQue.Receive 返回時讀取它的屬性。

  1. //byte[] bytes = msg.MessageBytes;  
  2. //payload = System.Text.Encoding.ASCII.GetString(. . .);  
  3. payload = "Total Memory = " + ((CustomMessage)msg).TotalMemory.ToString() +   
  4.                     (((CustomMessage)msg).AfterGC ? " after a GC" : " without forcing a GC");  
  5.  

【編輯推薦】

  1. 點對點消息隊列函數:用于WinCE的IPC機制
  2. ASP.NET中無Cookie會話的優點與缺點
  3. 無Cookie會話的實現
  4. ASP.NET Cookie:不是問題的問題
  5. .NET框架中的XML:XmlSerializer的內部原理
責任編輯:yangsai 來源: MSDN
相關推薦

2009-08-06 16:27:05

P2PMessageQ

2010-04-28 14:56:02

Oracle sqlp

2010-05-31 14:16:01

MySQL數學函數

2010-04-28 14:46:38

Oracle Copy

2010-05-04 12:10:08

Oracle over

2010-04-28 16:30:52

Oracle case

2010-05-07 18:52:59

Oracle rown

2010-04-29 13:31:16

Oracle Orad

2010-05-17 17:23:27

MySQL limit

2010-05-05 15:38:31

Oracle安全策略

2010-04-27 14:44:31

Oracle存儲過程

2010-04-06 08:58:27

Oracle job

2010-05-26 16:53:21

MySQL show

2010-04-29 10:41:55

2010-04-29 13:53:42

Oracle臨時表

2012-01-06 10:59:37

Nuget

2010-06-30 13:07:17

SQL Server函

2012-12-10 09:46:21

P2P云存儲Symform

2010-07-07 10:31:45

2011-04-25 13:36:26

iPad2攝像頭
點贊
收藏

51CTO技術棧公眾號

精品国产xxx| 水蜜桃av无码| 调教一区二区| 91在线观看高清| 国产精品久久97| 欧美成人精品激情在线视频| 老汉色老汉首页av亚洲| 欧美性xxxxx极品少妇| 人人妻人人澡人人爽欧美一区| 欧美拍拍视频| 国产精品自在在线| 日韩免费av在线| 久久精品www| 97偷自拍亚洲综合二区| 亚洲丁香婷深爱综合| www.超碰com| 国产白丝在线观看| 国产精品久久久久三级| 久久精品人成| 亚洲国产www| 久久精品免费看| 欧美做受高潮1| 精品肉丝脚一区二区三区| 日韩精品水蜜桃| 日韩av在线网址| 三上悠亚 电影| 欧美特黄色片| 91九色02白丝porn| 国产美女主播在线播放| 成人黄色在线电影| 国产精品网站在线观看| 美女精品国产| 少妇高潮一区二区三区99小说| 激情六月婷婷综合| 国产精品久久视频| 五月天激情四射| 日韩视频一区| 欧美激情精品久久久久久黑人| 羞羞在线观看视频| 久久精品国产www456c0m| 亚洲色图第一页| 毛茸茸多毛bbb毛多视频| 大香伊人久久精品一区二区| 91精品视频网| 一起操在线视频| 日韩成人在线电影| 欧美日韩免费视频| 一区二区三区视频在线观看免费| 国产日韩电影| 色哟哟一区二区三区| 日b视频免费观看| 青青草原av在线| 亚洲自拍偷拍网站| 亚洲理论电影在线观看| 国产又色又爽又黄刺激在线视频| 亚洲自拍与偷拍| 国产真人做爰毛片视频直播| 国产精品一品| 亚洲高清免费观看| 免费成人午夜视频| 最新欧美电影| 欧美日韩激情一区二区| 思思久久精品视频| 国产一区二区三区| 欧美va亚洲va| 最近中文字幕无免费| 制服丝袜日韩| 日韩中文字幕网址| 精品99久久久久成人网站免费| 欧美日本一区二区视频在线观看 | 免费高清完整在线观看| 中文字幕一区二区三区四区不卡 | 欧美成人在线免费观看| 国产黄在线观看免费观看不卡| 日本一区二区视频在线| 中文字幕人成一区| 日本高清在线观看| 欧美日韩视频在线| 最新天堂中文在线| 91在线一区| 亚洲精品少妇网址| 国内毛片毛片毛片毛片毛片| 欧美不卡在线| 97超级碰在线看视频免费在线看| 欧美日韩a v| 国产一区二区久久| 久久er99热精品一区二区三区| 国产香蕉在线| 亚洲美女屁股眼交3| heyzo亚洲| 日韩黄色碟片| 亚洲国产天堂网精品网站| 性欧美一区二区| 女人香蕉久久**毛片精品| 51色欧美片视频在线观看| 国产女优在线播放| 成人国产在线观看| 亚洲欧美国产精品桃花| 超碰在线最新网址| 欧美日韩不卡视频| 三级黄色片网站| 一区二区在线影院| 国产999精品视频| 99在线小视频| 日本一区二区三区国色天香| 免费人成自慰网站| 伊人久久精品| 亚洲午夜小视频| 国产一卡二卡在线| 国产在线一区观看| 婷婷五月色综合| 青青青免费在线视频| 91精品国产综合久久久久久久 | 国产精品久久久久久久久久东京 | 日韩中文字在线| 中文字幕69页| 不卡电影一区二区三区| 欧美h视频在线观看| 日韩精品一区二区三区| 精品久久久久久久一区二区蜜臀| 日本成人精品视频| 男人的j进女人的j一区| 欧美激情导航| 日韩激情电影免费看| 欧美电影精品一区二区| www中文在线| 日韩在线一区二区| 久久另类ts人妖一区二区| 欧美1—12sexvideos| 欧美精品色综合| 中文字幕黄色网址| 老司机免费视频久久| 久99久视频| 成入视频在线观看| 亚洲精品一线二线三线无人区| 欧美一级特黄高清视频| 青青草国产成人99久久| 日韩精品一区二区三区四区五区| 亚洲女同志freevdieo| 亚洲国产精品久久| 日韩av在线电影| 成人一区二区三区| 成人在线视频一区二区三区 | 精品欧美一区二区三区久久久| 亚洲区欧洲区| 日韩午夜三级在线| 久久久久黄色片| 国产jizzjizz一区二区| 欧美久久久久久久久久久久久久| 亚洲精品午夜| 韩剧1988免费观看全集| 天堂av中文字幕| 天天操天天干天天综合网| 在线观看国产免费视频| 国产一区二区三区久久久久久久久| 国内精品久久国产| 欧美亚洲日本精品| 亚洲偷欧美偷国内偷| 中文字幕日韩三级| 国产精品传媒入口麻豆| 四虎1515hh.com| 国产一区日韩欧美| 国产日韩欧美一区二区| 女人让男人操自己视频在线观看 | 亚洲欧洲成视频免费观看| 中文字幕av影院| 欧美激情综合在线| 亚洲综合在线一区二区| 欧美视频网站| 久久草.com| 成人在线网站| 草民午夜欧美限制a级福利片| 精品国自产拍在线观看| 午夜精品免费在线观看| 麻豆精品免费视频| 久久99精品国产麻豆婷婷洗澡| 欧洲金发美女大战黑人| 精品深夜福利视频| 国产精品久久久久久网站 | 亚洲乱码国产乱码精品精98午夜| 国产香蕉精品视频| 葵司免费一区二区三区四区五区| 综合网五月天| 美女扒开腿让男人桶爽久久动漫| 国产福利视频一区二区| 黄色网页网址在线免费| 日韩成人小视频| 一级黄色片在线看| 性欧美疯狂xxxxbbbb| 亚洲色图第四色| 粉嫩av一区二区三区| 北条麻妃在线视频| 国内精品福利| 午夜欧美性电影| 成人看片爽爽爽| 国产精品网站入口| 久久久男人天堂| 久久精品最新地址| 日本一本草久在线中文| 这里只有精品免费| 97人人澡人人爽人人模亚洲 | 久久天天东北熟女毛茸茸| 日韩av三区| 91香蕉亚洲精品| 成人va天堂| 韩国三级电影久久久久久| 日韩精品成人av| 亚洲人成五月天| 少妇人妻一区二区| 日韩一级二级三级精品视频| 这里只有久久精品视频| 亚洲自拍欧美精品| 黄视频网站免费看| 国产精品视频一区二区三区不卡| 少妇精品无码一区二区三区| 国产主播一区二区三区| 鲁一鲁一鲁一鲁一av| 国产农村妇女毛片精品久久莱园子 | 日韩高清免费在线| 国产wwwxxx| 欧美顶级少妇做爰| 中文字幕一区二区三区人妻四季| 欧美日韩国产综合新一区| 久久99久久98精品免观看软件| 国产精品情趣视频| 亚洲av无码一区二区三区人| 成人av电影在线播放| 美女流白浆视频| 国产精品综合网| 午夜免费视频网站| 国产麻豆精品在线| 欧美三级午夜理伦三级富婆| 日韩av网站在线观看| 无码精品国产一区二区三区免费| 日韩视频免费| 无码精品a∨在线观看中文| 亚洲经典三级| 男人的天堂狠狠干| 亚洲国产日韩在线| 欧美变态另类刺激| 欧美亚洲一区| 激情网站五月天| 久久尤物视频| 免费看污黄网站| 美女mm1313爽爽久久久蜜臀| 五月天激情视频在线观看| 日本麻豆一区二区三区视频| 污污视频网站免费观看| 日本成人在线电影网| 欧美第一页浮力影院| 国产一区二区视频在线播放| 99久久综合网| 不卡的电视剧免费网站有什么| 精品无码国产一区二区三区51安| 26uuu欧美| 女人十八毛片嫩草av| 国产精品污www在线观看| 国产真实乱在线更新| 依依成人精品视频| 成年人午夜视频| 91电影在线观看| 亚洲天堂国产精品| 日韩精品专区在线影院观看| 色欲av永久无码精品无码蜜桃| 亚洲男人天堂视频| 日本中文在线| 欧美激情成人在线视频| 亚洲美女尤物影院| 国产美女直播视频一区| 日韩精品久久久久久久软件91| 国产区一区二区| 国产亚洲一区二区三区啪 | 99热免费精品在线观看| 国产精品免费观看久久| 蜜桃视频免费观看一区| 国产伦精品一区二区三区妓女下载| 成人免费毛片片v| 美女脱光内衣内裤| 亚洲三级小视频| 欧美亚洲天堂网| 欧美性生交片4| 精品人妻午夜一区二区三区四区| 精品香蕉一区二区三区| 麻豆电影在线播放| 8x海外华人永久免费日韩内陆视频| 美女网站视频一区| 亚洲在线视频观看| 少妇精品久久久一区二区三区 | 二区在线播放| 日本亚洲欧美成人| 免费精品一区| 日韩在线导航| 亚洲激情午夜| 99精品999| 久久久久高清精品| 久久久久国产精品夜夜夜夜夜| 91精品福利视频| 亚洲国产一二三区| 中文字幕亚洲综合久久筱田步美| 日本高清在线观看视频| 国产精选久久久久久| 噜噜噜狠狠夜夜躁精品仙踪林| 在线电影看在线一区二区三区| 日韩午夜在线电影| 992kp免费看片| 国产欧美1区2区3区| 日韩久久精品视频| 欧美一三区三区四区免费在线看| 黄色电影免费在线看| 久久男人的天堂| 国产精品一区二区美女视频免费看| 欧美另类一区| 亚洲免费成人| 不卡的一区二区| 中文字幕永久在线不卡| 无码人妻丰满熟妇区bbbbxxxx| 精品久久久三级丝袜| 国产传媒在线播放| 国产精品久久婷婷六月丁香| 亚州综合一区| 国产在线播放观看| 风间由美性色一区二区三区| 女同久久另类69精品国产| 欧美性三三影院| 九色国产在线观看| 欧美在线播放视频| 久久精品66| 青娱乐自拍偷拍| 成人aaaa免费全部观看| 久久久久免费看| 日韩一区二区三| 日韩影视在线| 成人av资源网| 激情综合自拍| 在线观看免费视频黄| 一区二区三区四区精品在线视频| 11024精品一区二区三区日韩| 中文字幕日韩av综合精品| 欧美日韩亚洲国产| 天堂精品一区二区三区| 日韩**一区毛片| 在线免费看视频| 欧美日韩1区2区| 国产最新在线| 91传媒视频免费| 欧美日韩久久| www.男人天堂| 五月开心婷婷久久| 牛牛澡牛牛爽一区二区| 日本精品在线视频| 欧美日中文字幕| 在线观看岛国av| 亚洲欧美另类在线| 亚洲免费一级片| **欧美日韩vr在线| 欧美禁忌电影| 日韩爱爱小视频| 亚洲精品欧美二区三区中文字幕| 在线免费看av的网站| 久久久精品在线观看| 视频精品国内| 精品欧美一区免费观看α√| 国产婷婷一区二区| 国产精品视频无码| 久久久免费电影| 女厕嘘嘘一区二区在线播放| 男女爽爽爽视频| 亚洲男同性视频| 人妻一区二区三区免费| 国产成+人+综合+亚洲欧洲| 欧美aaaa视频| 国产一卡二卡三卡四卡| 色婷婷精品大在线视频| 久操视频在线免费播放| 国产成人精品免费视频大全最热| 国产一区欧美| 久久久久久成人网| 日韩欧美在线不卡| 亚洲v.com| 色哺乳xxxxhd奶水米仓惠香| av日韩在线网站| 一级黄色片在线| 欧美又大又硬又粗bbbbb| 四季av一区二区凹凸精品| 欧美夫妇交换xxx| 欧美日韩成人在线一区| 色资源二区在线视频| 视频一区免费观看| 丁香激情综合国产| 青娱乐在线免费视频| 欧美日韩国产第一页| 国产在视频线精品视频www666| 中文字幕第22页| 在线视频欧美区| 国产网红女主播精品视频| 亚洲成人自拍视频| 97se亚洲国产综合自在线| 在线观看日批视频| 欧美专区国产专区| 欧美片第1页综合|