关于一个页面中多个silverlight应用程序通信的总结

  在没有接触过多个silverlight应用程序通信之前,我们肯定都觉得这个问题很复杂,其实呢,相当的简单。
  下面我将通过几个例子让大家了解一下多个silverlight应用程序之间的通讯怎么样实现,好,之后我们可以用他来做网页中
更有趣的小silverlight功能块并使其看似独立实际交相辉映。

第一种方法。

一提到通讯一定有个监听端和一个发送端
主要的提供的两个类:
LocalMessageReceiver:接受消息
LocalMessageSender: 发送消息
 
示例如下
监听端:
  public MainPage()
        {
            InitializeComponent();
            LocalMessageReceiver Lmr = new LocalMessageReceiver("MyReceiver");
            Lmr.MessageReceived += new EventHandler(Lmr_MessageReceived);
            Lmr.Listen();
        }

//接受到消息的事件方法
  void Lmr_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            this.textBox1.Text = e.Message;
            e.Response = "收到";
        }
 
发送端:
 LocalMessageSender Lm = new LocalMessageSender("MyReceiver");
lm.SendAsync(“消息内容”);
 
 还有一点需要注意的
        1 )在消息发送方, LocalMessageSender 对象有一个 ReceiverDomain 属性,默认值为 null ,这意味着, 消息的发送方与接收方必须位于同一个域( Domain )中
 什么是域的概念呢,补充一下
      域(Domain)”和“应用程序域(AppDomain)”不是一回事。域表明了Silverlight应用程序的位置信息,诸如:“www.myuniversity.edu.cn”之类,而应用程序域则代表了Silverlight应用程序的运行环境,Silverlight插件在装载一个Silverlight应用程序时,会为其创建一个应用程序域作为其运行环境。
      假设某网页使用多个元素承载了多个Silverlight应用程序,则Silverlight插件会为每个Silverlight应用程序创建相互独立的应用程序域,这些Silverlight应用程序的“域”可以相同(只要来源于同一个网站),也可以不同(如果来源于不同的网站)。
   如果将发送方的 ReceiverDomain 属性设置为 LocalMessageSender.Global 值(其实就是一个仅包容单个“ * ”字符的字串),则发送方可以向另一个域的 Silverlight 应用程序发送信息。
 LocalMessageReceiver Lmr = new LocalMessageReceiver("MyReceiver", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
  (2)接收方和发送方的名字一定要一致,才可以接受和发送消息。同一个域的接受对象LocalMessageReceiver不能重名

第二种方法

第二种方法是在一个本地应用程序中用HyperlinkButton控制另一个本地应用程序的Framet跳转 ,这个是我在做两个silverlight应用通讯
时无意中发现的
 
    
< HyperlinkButton Height ="23" NavigateUri ="/2" TargetName ="frame2" Content ="2" HorizontalAlignment ="Left" Width ="50" />
 另一个应用中的frame这样写
 
     
< sdk:Frame Source ="/1" Background ="Tan" Height ="259" HorizontalAlignment ="Left" Name ="frame2" VerticalAlignment ="Bottom" Width ="400" >
< sdk:Frame.UriMapper >
< sdk:UriMapper >
< sdk:UriMapping Uri ="" MappedUri ="/ChildrenPage/Page1.xaml" />
< sdk:UriMapping Uri ="/{pageName}" MappedUri ="/ChildrenPage/Page{pageName}.xaml" />
sdk:UriMapper >
sdk:Frame.UriMapper >
sdk:Frame >
 这样点击HyperlinkButton的时候另一个应用中的frame就可以跳转了。
开始我认为是TargetName属性的缘故 设置成外面Frame的名字找到的目标,其实不是这样。
跳转的路径是从浏览器的地址参数中传过来的
  2011033123475137.jpg
 
 

转载于:https://www.cnblogs.com/allanxyq/archive/2011/04/01/1998257.html

你可能感兴趣的:(关于一个页面中多个silverlight应用程序通信的总结)