zoukankan      html  css  js  c++  java
  • silverlight3 加载其他xap

    有些时候我们在设计有集成sl系统的时候总会想把xap作为基点来达到持续集成的效果。那么我们应该怎么做呢?

    解决方法:

    1.首先我们要用一个方法实现从源资中提取出Assembly:

     1:  Assembly LoadAssemblyFromXap(Stream packageStream, String assemblyName)
     2:          {
     3:              StreamResourceInfo resouceInfo = new StreamResourceInfo(packageStream, "application/binary");
     4:              Stream mainfestStream = Application.GetResourceStream(resouceInfo, new Uri("AppManifest.xaml", UriKind.Relative)).Stream;
     5:              String appManifestString = new StreamReader(mainfestStream).ReadToEnd();
     6:  
     7:              XElement deploymentRoot = XDocument.Parse(appManifestString).Root;
     8:              List<XElement> deploymentParts = (from assemblyParts in deploymentRoot.Elements().Elements() select assemblyParts).ToList();
     9:  
    10:              Assembly targetassembly = null;
    11:  
    12:              foreach (XElement xElement in deploymentParts)
    13:              {
    14:                  String source = xElement.Attribute("Source").Value;
    15:                  if (source == assemblyName)
    16:                  {
    17:                      StreamResourceInfo streamInfo = Application.GetResourceStream(resouceInfo, new Uri(source, UriKind.Relative));
    18:                      AssemblyPart asmPart = new AssemblyPart();
    19:                      targetassembly = asmPart.Load(streamInfo.Stream);
    20:                  }
    21:              }
    22:              return targetassembly;
    23:          }

    2.利用一个webClient下载指定的其他xap文件,并在下载完成后,利用上边的方法把加载后的资料还完成一个UIElement,这样我们就可以使用了.

     1:  void MainPage_Loaded(object sender, RoutedEventArgs e)
     2:  {
     3:      //加一个xap文件所在的位置
     4:      Uri address = new Uri("http://localhost:4456/ClientBin/exproject.xap");
     5:      //实例一个webClient
     6:      WebClient webClient = new WebClient();
     7:      //注册一个下载完成事件
     8:      webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
     9:     //开始下载
    10:      webClient.OpenReadAsync(address); 
    11:  }

    3.下载完成后通过LoadAssemblyFromXap方法还原xpa为UIElement:

     1:  void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
     2:  {
     3:      Stream stream = Application.GetResourceStream(
     4:           new StreamResourceInfo(e.Result, null),
     5:           new Uri("AppManifest.xaml", UriKind.Relative)).Stream;
     6:      String appManifestString = new StreamReader(stream).ReadToEnd();
     7:  
     8:      Assembly assembly = LoadAssemblyFromXap(e.Result, "exproject.dll");//other project name.dll 
     9:      UIElement element = assembly.CreateInstance("exproject.MainPage") as UIElement;//other project name.mainPage 
    10:      this.contaner.Children.Add(element);
    11:  } 
  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1160 FatMouse's Speed
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1003 Max Sum
    HDU 1297 Children’s Queue
    UVA1584环状序列 Circular Sequence
    UVA442 矩阵链乘 Matrix Chain Multiplication
    DjangoModels修改后出现You are trying to add a non-nullable field 'download' to book without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:
    opencv做的简单播放器
    c++文件流输入输出
  • 原文地址:https://www.cnblogs.com/jacle169/p/2810094.html
Copyright © 2011-2022 走看看