zoukankan      html  css  js  c++  java
  • 关于一个页面中多个silverlight应用程序通信的总结

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

    第一种方法。

    一提到通讯一定有个监听端和一个发送端
    主要的提供的两个类:
    LocalMessageReceiver:接受消息
    LocalMessageSender: 发送消息
     
    示例如下
    监听端:
      public MainPage()
            {
                InitializeComponent();
                LocalMessageReceiver Lmr = new LocalMessageReceiver("MyReceiver");
                Lmr.MessageReceived += new EventHandler<MessageReceivedEventArgs>(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应用程序时,会为其创建一个应用程序域作为其运行环境。
          假设某网页使用多个<object>元素承载了多个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的名字找到的目标,其实不是这样。
    跳转的路径是从浏览器的地址参数中传过来的
     
     
     
  • 相关阅读:
    axios 修改头部请求数据格式的方法
    基于VUE的可以滚动的横向时间轴
    25.客户端多线程分组模拟高频并发数据
    24.原子操作
    23.线程锁的使用
    22.线程自解锁
    21.多线程-锁与临界区域
    20.多线程-基本代码
    19.添加高精度计时器测量处理能力
    18.windows使用select突破64个socket
  • 原文地址:https://www.cnblogs.com/allanxyq/p/1998257.html
Copyright © 2011-2022 走看看