(Siverlight应用程序之间)通过宿主(B屏)New对象,进行的交互消息(反射)

 

       由于最近的项目要实现一机多屏(实际上属于同一个IE,同一个Siverlight程序,通过宿主(B屏)New对象,添加到B屏容器中,并展示B与C屏共同展示),B与C屏或者多屏之间的通信,此种方法只限于程序集内部,通过反射机制完成。所以BC屏之间的通讯,各方必须提供公共的方法,并且约束方法名,以便使用者调用;此种方法使用于多个屏之间互相调用。

注:

1、ABC屏分别代表第一,第二,第三屏幕显示,属于同一个IE浏览器内(1280X3,1024);

2、由于框架上的设计已经写好,不能更改框架,另外B屏与C屏是属于不同的silverlight项目的,所以建立此种方式,创建对象来引用C屏;

        以下分别说明调用:

1、  B屏调用C屏,C屏必须提供的公共方法

 1)、B屏项目

        /// <summary>
        /// C屏的MainPage页面对象,前提是B屏项目必须引用C屏项目
         /// </summary>
        CScreenProject.MainPage mpObj = null;

mpObj = new CScreenProject.MainPage();

        //利用反射对象寻找方法并调用(前提必须是要知道公共的方法名)
//无返回无参数方法的调用
        Type type = mpObj.GetType();
        var methodObj = type.GetMethod("ShowWindow");ShowWindow为方法名        methodObj.Invoke(mpObj, null);


 

 

 2) 、C屏项目

      //提供公共方法,用于B屏调用
       public void ShowWindow()
      {
            MessageBox.Show("弹出的窗口:您使用的是无参数方法");
      }

2、C屏调用B屏,B屏必须提供的公共方法

   1)、C屏

 

          // 寻找引用该项目的宿主对象的外框
            FrameworkElement obj = GetParentByName(this, "BScreenProject.MainPage");//第二个参数必须全称(包括命名空间)
            //利用反射对象寻找方法并调用(前提必须是要知道公共的方法名)
            if (obj != null)
            {
                Type type = obj.GetType();
                var methodObj = type.GetMethod("CScreenProjectMethod"); // B屏提供的方法
                methodObj.Invoke(obj, new object[] { "C屏调用了B屏方法!" });//无返回无参数方法的调用
            }


        /// <summary>
        /// 根据名称查找对应的API框架对象
        /// </summary>
        /// <param name="obj">FrameworkElement对象</param>
        /// <param name="name"> B屏上引用C屏页面的名称(命名空间+类)</param>
        /// <returns>API对象或null</returns>
        protected FrameworkElement GetParentByName(FrameworkElement obj, string name)
        {
            if (obj != null)
            {
                if (obj.GetType().FullName.IndexOf(name) > -1)
                {
                    return obj;
                }
                else
                {
                    return GetParentByName((FrameworkElement)obj.Parent, name);
                }
            }
            else
            {
                return null;
            }
        }


   2)、B屏

        /// <summary>
        /// 提供C屏调用的方法
         /// </summary>
        /// <param name="strData">参数</param>
        public void CScreenProjectMethod(string strData)
        {
            MessageBox.Show(strData);
        }


 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值