silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了31.Silverlight中WebClient+StreamResourceInfo+反射实现动态加载外部XAP程序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

        在Silverlight中我们时常会遇到需要加载其他已经制作完成的Silverlight程序的情况,在本节中我们使用WebClient下载XAP 包形式的Silverlight程序,然后使用反射的方式解析出这个Silverlight的程序加载到本Silverlight程序中。步骤如下:         1 •首先我们使用WebClient类的OpenReadAsync(Uri)方法
@H_674_18@        在Silverlight中我们时常会遇到需要加载其他已经制作完成的Silverlight程序的情况,在本节中我们使用WebClient下载XAP 包形式的Silverlight程序,然后使用反射的方式解析出这个Silverlight的程序加载到本Silverlight程序中。步骤如下:

@H_674_18@        1 •首先我们使用WebClient类的OpenReadAsync(Uri)方法读取某个Uri位置的XAP文件,可以得到这个XAP的Stream值。

@H_674_18@        2 •使用Application.GetresourceStream(StreamresourceInfo,Uri)从 指定 zip/XAP 包中的某个位置返回资源文件。(这个函数有两个参数:第一个参数是new StreamresourceInfo(Stream)获取到WebClient下载下来的XAP Stream。第二个参数:在这个XAP包中的某一个位置的需要运行的文件的DLL的Uri。)

@H_674_18@        3 •上一步骤运行函数Application.GetresourceStream得到的返回值也是一个StreamresourceInfo类型的值,将此值运行.Stream属性获取到它的Stream流。

@H_674_18@        4 •AssemblyPart.Load(Stream)方法将 Stream 转换为随后将加载到当前应用程序域中的 Assembly。

@H_674_18@        5 •(UserControl)assembly.CreateInstance(mainstr)根据mainstr名从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。

@H_674_18@        下面我们创一个名为SLoadXAP的Silverlight应用程序,在SLoadXAP.Web项目的ClientBin文件夹中,放入第29节中我们制作成功的雷达XAP包,然后编写一下代码即可成功动态加载XAP包。

@H_674_18@ 

 
 
  1. public partial class MainPage : UserControl 
  2. { 
  3. public MainPage() 
  4. { 
  5. InitializeComponent(); 
  6.  
  7. private void button1_Click(object sender, routedEventArgs E) 
  8. { 
  9. //1 •使用WebClient下载SLRandarHitTest.xap文件,进行异步读取。 
  10. WebClient Appclient = new WebClient(); 
  11. Appclient.openReadAsync(new Uri(@H_@R_673_11235@_118@"SLRandarHitTest.xap", UriKind.Relative)); 
  12. Appclient.openReadCoR_787_11845@pleted += new OpenReadCoR_787_11845@pletedEventHandler(Appclient_OpenReadCoR_787_11845@pleted); 
  13.  
  14.  
  15. void Appclient_OpenReadCoR_787_11845@pleted(object sender, OpenReadCoR_787_11845@pletedEventArgs E) 
  16. { 
  17. CreateXAPresource(@H_@R_673_11235@_118@"SLRandar.dll",@H_@R_673_11235@_118@"SLRandar.MainPage",e.Result); 
  18. /// <sumMary
  19. /// 创建XAP包的反射实例并且加装到Canvas中 
  20. /// </sumMary
  21. /// <param name=@H_@R_673_11235@_118@"dllStr">XAP包中的编译完成的运行代码的DLL文件</param> 
  22. /// <param name=@H_@R_673_11235@_118@"mainstr">需要实例化的启动页面</param> 
  23. /// <param name=@H_@R_673_11235@_118@"resultStream">使用WebClient下载到的数据流</param> 
  24. private void CreateXAPresource(String dllStr,String mainstr,Stream resultStream) 
  25. { 
  26. //2 • 
  27. //3 •获取其他包提供的资源流信息 
  28. StreamresourceInfo streamresourceInfo = Application.GetresourceStream(new StreamresourceInfo(resultStream as Stream, null), new Uri(dllStr, UriKind.RelativeOrAbsolutE)); 
  29. //4 •对Stream进行反射 
  30. AssemblyPart assemblyPart = new AssemblyPart(); 
  31. Assembly assembly = assemblyPart.Load(streamresourceInfo.Stream); 
  32. //5 •(创建实例 
  33. var uc = (UserControl)assembly.CreateInstance(mainstr); 
  34. lRoot.Children.Clear(); 
  35. lRoot.Children.Add(uc); 
  36.  
@H_674_18@        本实例采用VS2010+Silverlight 4.0编写,如需源码点击 SLoadXAP.zip 下载。

@H_674_18@ 

@H_674_18@

31.Silverlight中WebClient+StreamResourceInfo+反射实现动态加载外部XAP程序

@H_674_18@

大佬总结

以上是大佬教程为你收集整理的31.Silverlight中WebClient+StreamResourceInfo+反射实现动态加载外部XAP程序全部内容,希望文章能够帮你解决31.Silverlight中WebClient+StreamResourceInfo+反射实现动态加载外部XAP程序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。