关于WPF多窗口消息传递的简单实现
2016-08-08 15:41
495 查看
在目前一些桌面端展示系统的应用中,需要多个子系统窗口进行信息交换,对于部署在同一台电脑上的各个子系统,可以通过集成windows系统的消息传递方式进行消息传递,但是假如将各个子系统部署在不同的电脑上,这种实现方式就有一定的局限性,要涉及到网络中的不同电脑进行通信,.net提供了可以建一个小的http服务器,可以绑定计算机的端口进行通信,且提供了异步的实现方式,能实现无阻塞的消息通信。
具体实现: //启动一个监听, 并绑定端口,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; //Console.WriteLine("Waiting for request to be processed asyncronously."); //result.AsyncWaitHandle.WaitOne(); //listener.Close(); } 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; 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); }将建立好的代码集成到应用程序里,使用.Net的webclient就可以进行消息的操作。
相关文章推荐
- 关于WPF的两个窗口之间简单的数据传递【附源代码】
- 关于WPF的两个窗口之间简单的数据传递
- 关于VCL的编写 (二) 简单介绍一下VCL消息传递
- 关于VCL的编写 (二) 简单介绍一下VCL消息传递 .
- Mina框架并实现Server与Client端的简单消息传递!
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
- activemq实现简单的消息传递(java 实现)
- 关于window.showModalDialog 的简单应用,父子窗口之间的传递
- C#+JS简单实现 定时轮询数据表 以及时弹出消息提示窗口
- 关于message的消息传递简单的小例子,带部分注释
- 简单远程控制(仅传递鼠标和键盘消息)的实现
- 关于java窗口界面实现的简单流程(简易计算器)
- c#关于Delegate最简单的例子:两个窗体间的消息传递
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
- C#+JS简单实现 定时轮询数据表 以及时弹出消息提示窗口
- c#消息传递简单实现
- 搭建Apache Mina框架并实现Server与Client端的简单消息传递
- 问题:关于贴友一个用js传递value默认值的简单实现
- c#关于Delegate最简单的例子:两个窗体间的消息传递
- 基于TCP实现简单的客户端服务端的消息传递(二)