Silverlight 3.0 中的 Local Connection

简介: 现在很多的需求中需要一个插件实例和另一个实例进行通讯。在同一个页面中调用Html、js等来通讯,而这个往往有一些限制,需要专门的去设置一些权限。在Silverlight 3.0 中新增了一个功能使得跨越实例的通讯变得极为的简单,这个功能为本地连接。
现在很多的需求中需要一个插件实例和另一个实例进行通讯。在同一个页面中调用Html、js等来通讯,而这个往往有一些限制,需要专门的去设置一些权限。在Silverlight 3.0 中新增了一个功能使得跨越实例的通讯变得极为的简单,这个功能为本地连接。

通过本地连接就也可以在不同页面间多个Silverlight实例创建通讯通道。这样就可以创建多个基于Silverlight的应用程序或者基于其他技术的内容在一起的复杂布局。

使用本地连接这里有两个关键的类:
  • LocalMessageSender
  • LocalMessageReceiver

发送
创建发送器对象,发送消息并且接收响应实现双向通讯。
        private   void  btnSend_Click( object  sender, System.Windows.RoutedEventArgs e)
        {
            LocalMessageSender msgSender 
=   new  LocalMessageSender( " myReceiver " );
            msgSender.SendCompleted 
+=   new  EventHandler(msgSender_SendCompleted);


            msgSender.SendAsync(txtMessage.Text);
        }


        
void  msgSender_SendCompleted( object  sender, SendCompletedEventArgs e)
        {
            TextBlock tb 
=   new  TextBlock();
            
if  (e.Error  !=   null )
            {
                tb.Text 
=  String.Format( " 错误: [{0}] " , e.Error.Message);
            }
            
else
            {
                tb.Text 
=  String.Format( " {0} " , e.Response  ==   null   ?   " None "  : e.Response);
            }
            spSends.Children.Add(tb);
            xScrollViewer.ScrollToVerticalOffset(xScrollViewer.ScrollableHeight);
        }
接收
创建接收器对象,每个接收器都可以接收来自任意数目的发送器的消息,但是只接收来自指定发送器域的消息。
         void  MainPage_Loaded( object  sender, RoutedEventArgs e)
        {
            receiver 
=   new  LocalMessageReceiver( " myReceiver " );
            receiver.MessageReceived 
+=   new  EventHandler(receiver_MessageReceived);


            receiver.Listen();
        }


        
void  receiver_MessageReceived( object  sender, MessageReceivedEventArgs e)
        {
            e.Response 
=   " 发送成功【 "   +  e.Message  +   " " ;


            TextBlock tb 
=   new  TextBlock();
            tb.Text 
=   " 接收来自 "   +  e.ReceiverName  +   " 的数据: "   +  e.Message;
            
            spSends.Children.Add(tb);
            xScrollViewer.ScrollToVerticalOffset(xScrollViewer.ScrollableHeight);
        }
同一页面

多个页面

参考资料
实例下载

相关文章
|
4月前
|
网络安全 虚拟化 Windows
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
|
移动开发 Windows
A simple in-process HTTP server for UWP
原文 http://www.dzhang.com/blog/2012/09/18/a-simple-in-process-http-server-for-windows-8-metro-apps 简单来说,就是在UWP中做一个支持GET请求简单的Web Server,本实例UWP(server) 与 Winform(client) 在同一机子将无法通讯,但UWP(server)写client代码可调用调试。
1630 0