(Siverlight应用程序之间)通过宿主(B屏)New对象,进行的交互消息(反射)
2011-08-04 15:20
357 查看
由于最近的项目要实现一机多屏(实际上属于同一个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); }
相关文章推荐
- 消息队列(MSMQ)实现多服务器应用程序之间消息实时交互
- WorkerThread与MainThread之间通过Handler进行最简单的消息传递
- 代码 - 通过反射对象属性进行遍历赋值
- SpringBoot 集成 rabbitmq 简单实现通过队列进行,订单系统与库存系统,物流系统之间的信息交互
- 通过反射,给对象之间赋值
- 客户端和应用服务器之间利用HttpClient和Servlet交互JSON对象进行通信
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- 通过反射完成不同对象之间的属性拷贝
- 通过反射机制,对将要入库的实体对象的各个属性进行判断,得到最终要更新的实体对象
- java通过反射,泛型将定义的对象与对象之间互转
- 对象之间通过反射拷贝数据
- 通过URLConnection发送序列化对象的方式实验分布式系统之间的数据交互
- 反射工具类,通过getMethod和setMethod进行操作
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
- 协调多个对象之间的交互——中介者模式(Mediator Pattern)
- C/C++与Lua之间进行数据函数交互
- android中通过SharedPreferences进行对象的存储
- protobuf在java应用中通过反射动态创建对象
- 用方法对象进行反射
- 【GoLang】golang 如何像Java 一样通过类名反射对象?