• Silverlight杂记本地程序间的互通


    只要使用到两个类一个用来发送一个用来接收。

    可以有多个发送端,但只能有一个接收端。

    来段demo

    public partial class localcoon : UserControl {
           
    public localcoon() {
               InitializeComponent();
               
    //
               _sender = new LocalMessageSender("InAction", LocalMessageSender.Global);
               textBox1.TextChanged 
    += (s, e) => {
                   {
                       _sender.SendAsync(textBox1.Text);
                   }
               };
           }
           
    private LocalMessageSender _sender;
           
    private void button1_Click(object sender, RoutedEventArgs e1) {
               
    //表示两个基于 Silverlight 的应用程序之间的本地消息传递通道的接收端。
               LocalMessageReceiver _receive;
               _receive 
    = new LocalMessageReceiver("InAction",
                    ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
               _receive.Listen();
               _receive.MessageReceived 
    += (s, e) => {
                   textBlock3.Text 
    =
                      
    "Message: " + e.Message + Environment.NewLine +
                      
    "NameScope " + e.NameScope +
                      
    " completed." + Environment.NewLine +
                      
    "Response: " + e.Response + Environment.NewLine +
                      
    "ReceiverName: " + e.ReceiverName + Environment.NewLine +
    //获取此发送方会将消息发送到的 LocalMessageReceiver 的名称。
                      "SenderDomain: " + e.SenderDomain;//获取此发送方会将消息发送到的 LocalMessageReceiver 的域
               };
           }
       }

      

    25

    其中一个是IE9 一个是 opera浏览器。

    一些模糊的概念

    1域

    详见扩展阅读

    域(Domain)”和“应用程序域(AppDomain)”不是一回事。域表明了Silverlight应用程序的位置信息,诸如:“www.myuniversity.edu.cn”之类,而应用程序域则代表了Silverlight应用程序的运行环境,Silverlight插件在装载一个Silverlight应用程序时,会为其创建一个应用程序域作为其运行环境。

    假设某网页使用多个<object>元素承载了多个Silverlight应用程序,则Silverlight插件会为每个Silverlight应用程序创建相互独立的应用程序域,这些Silverlight应用程序的“域”可以相同(只要来源于同一个网站),也可以不同(如果来源于不同的网站)

    2

    26

    3

    自定义的时候可以是

      Receiver = new LocalMessageReceiver("InAction",

            ReceiverNameScope.Global,

    new string[] {"www.baidu.com",www.xxx.com});

    如果想指定任意可以是*

    4

    4其最终是调用下面函数发送的

    [DllImport("agcore", EntryPoint="LocalMessageSend")]
    private static extern uint LocalMessageSendNative
    (IntPtr nativePeerPtr, 
    uint cMessage, [MarshalAs(UnmanagedType.LPWStr)] string message, 
    uint cReceiverName, [MarshalAs(UnmanagedType.LPWStr)] string receiverName,
     
    uint cReceiverDomain, [MarshalAs(UnmanagedType.LPWStr)] string receiverDomain, uint managedKey);
    
    

    应用

    本地程序通讯可以用于,只启动一个程序或者,同一个浏览器中多个关联Silverlight程序之间的信息共享。

    推荐阅读

    在两个Silverlight应用间数据通信(包括与Flash通信)

    Silverlight应用程序的本地通讯

  • 相关阅读:
    泛型程序设计详解(一)
    面向对象三大特性-----封装、继承、多态
    委托与事件-委托事件案例(三)
    委托与事件-事件详解(二)
    委托与事件-委托详解(一)
    抽象类及接口详解
    基础类型详解下
    C#类型详解
    【JVM】-- JVM内存结构
    【redis】-- redis的持久化(作为数据库)
  • 原文地址:https://www.cnblogs.com/facingwaller/p/1916742.html
Copyright © 2020-2023  润新知