关于WPF多窗口消息传递的简单实现

2016-08-20 10:39:47来源:http://speciallst.blog.51cto.com/9749849/1835672作者:speciallst人点击


在目前一些桌面端展示系统的应用中,需要多个子系统窗口进行信息交换,对于部署在同一台电脑上的各个子系统,可以通过集成windows系统的消息传递方式进行消息传递,但是假如将各个子系统部署在不同的电脑上,这种实现方式就有一定的局限性,要涉及到网络中的不同电脑进行通信,.net提供了可以建一个小的http服务器,可以绑定计算机的端口进行通信,且提供了异步的实现方式,能实现无阻塞的消息通信。

具体实现:
//启动一个监听,并绑定端口,MSDN有详细参数说明
publicboolStartListener(string[]prefixes)
{
boolisSuccess=false;
if(HttpListener.IsSupported)
{
HttpListenerlistener=newHttpListener();
foreach(stringsinprefixes)
{
listener.Prefixes.Add(s);
}
listener.Start();
varresult=listener.BeginGetContext(newAsyncCallback(ListenerCallback),listener);
isSuccess=true;
//Console.WriteLine("Waitingforrequesttobeprocessedasyncronously.");
//result.AsyncWaitHandle.WaitOne();
//listener.Close();
}
returnisSuccess;
}

publicvoidStopListener()
{
if(listener!=null)
{
if(listener.IsListening)
{
listener.Stop();
}
listener.Close();
}
}
//异步接收数据,并进行下一次的
privatevoidListenerCallback(IAsyncResultresult)
{
HttpListenerlistener=(HttpListener)result.AsyncState;
HttpListenerContextcontext=listener.EndGetContext(result);
HttpListenerRequestrequest=context.Request;
HttpListenerResponseresponse=context.Response;
response.ContentType="text/plain";
System.IO.Streamoutput=response.OutputStream;
stringresponseString="true";
try
{
if(MessageAction!=null)
{
System.IO.StreaminputStream=request.InputStream;
stringresStr=string.Empty;
if(inputStream.CanRead)
{
byte[]bytes=newbyte[request.ContentLength64];
intnumBytesToRead=(int)request.ContentLength64;
inputStream.Read(bytes,0,numBytesToRead);
inputStream.Close();
resStr=Encoding.UTF8.GetString(bytes);
}
MessageAction(resStr);
}
}
catch(Exceptionex)
{
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(newAsyncCallback(ListenerCallback),listener);
}

将建立好的代码集成到应用程序里,使用.Net的webclient就可以进行消息的操作。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台