天天看點

C#應用程式多視窗消息傳遞

//啟動一個監聽, 并綁定端口,MSDN有詳細參數說明​​

​​public​​​ ​​bool​​​ ​​StartListener(​​​​string​​​​[] prefixes)​​


​​{​​


​​bool​​​ ​​isSuccess = ​​​​false​​​​;​​


​​if​​​ ​​(HttpListener.IsSupported)​​


​​{​​


​​HttpListener listener = ​​​​new​​​ ​​HttpListener();​​


​​foreach​​​ ​​(​​​​string​​​ ​​s ​​​​in​​​ ​​prefixes)​​


​​{​​


​​listener.Prefixes.Add(s);​​


​​}​​


​​listener.Start();​​


​​var​​​ ​​result = listener.BeginGetContext(​​​​new​​​ ​​AsyncCallback(ListenerCallback), listener);​​


​​isSuccess = ​​​​true​​​​; ​​


​​}​​


​​return​​​ ​​isSuccess;​​


​​}​​

//關閉服務監聽

​​public​​​ ​​void​​​ ​​StopListener()​​​​{​​


​​if​​​ ​​(listener != ​​​​null​​​​)​​

​​{​​

​​if​​​ ​​(listener.IsListening)​​


​​{​​


​​listener.Stop();​​


​​}​​


​​listener.Close();​​

​​  }​​
​​}​​

​​//異步接收資料,并進行下一次的事件監聽​​

​​private​​​ ​​void​​​ ​​ListenerCallback(IAsyncResult result)​​


​​{​​


​​HttpListener listener = (HttpListener)result.AsyncState;​​


​​HttpListenerContext context = listener.EndGetContext(result);​​


​​HttpListenerRequest request = context.Request;​​

​​HttpListenerResponse response = context.Response;​​
​​ContentType 根據選擇會自由傳回,也可以是Json​​

​​response.ContentType = ​​​​"text/plain"​​​​;​​


​​System.IO.Stream output = response.OutputStream;​​


​​string​​​ ​​responseString = ​​​​"true"​​​​;​​


​​try​​


​​{​​


​​if​​​ ​​(MessageAction != ​​​​null​​​​)​​


​​{​​


​​System.IO.Stream inputStream = request.InputStream;​​


​​string​​​ ​​resStr = ​​​​string​​​​.Empty;​​


​​if​​​ ​​(inputStream.CanRead)​​


​​{​​


​​byte​​​​[] bytes = ​​​​new​​​ ​​byte​​​​[request.ContentLength64];​​


​​int​​​ ​​numBytesToRead = (​​​​int​​​​)request.ContentLength64;​​


​​inputStream.Read(bytes, 0, numBytesToRead);​​


​​inputStream.Close();​​


​​resStr = Encoding.UTF8.GetString(bytes);​​


​​}​​


​​MessageAction(resStr);​​


​​}​​


​​}​​


​​catch​​​ ​​(Exception ex)​​


​​{​​


​​responseString = ​​​​"false"​​​​;​​


​​}​​


​​byte​​​​[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);​​


​​response.ContentLength64 = buffer.Length;​​


​​output.Write(buffer, 0, buffer.Length);​​


​​output.Close();​​


​​result = listener.BeginGetContext(​​​​new​​​ ​​AsyncCallback(ListenerCallback), listener);​​


​​}​​

​
​
​​   因為使用的是異步監聽,效率還是挺高的,延遲很短,能保證一個視覺上的系統執行。
​      

繼續閱讀