关于Silverlight动态加载的疑问

最近在搞sl的项目,正好用到动态加载,就找了一下。发现网上基本上都是用webClient下载,之后异步加载。

当然了SL只能异步加载,但是我使用了压力测试的情况下发现,事情没有这么简单。

首先MSDN上明确指定这个异步加载的方式,在不阻止调用线程的情况下.

之后好玩的事出来了,首先是在webclient下载前线程为1

   
   
   
   
1 WebClient wc = new WebClient();

3 wc.OpenReadCompleted += infoDownloader_Completed;
4 wc.OpenReadAsync( new Uri(msg.NameSpace, UriKind.Relative));

之后到了infoDownloader_Completed时,线程数变了,改为7

 

重点来了,这时new AssemblyPart报错了,

    
    
    
    
void infoDownloader_Completed( object sender, OpenReadCompletedEventArgs e)
{
try
{
if (e.Error == null )
{
AssemblyPart _part
= new AssemblyPart();
Assembly assembly
= _part.Load(e.Result); // 导入程序集名称
Type cls = assembly.GetType(_msg.ClassName, true );

错误信息如下:

      
      
      
      
{System.UnauthorizedAccessException: 跨线程访问无效。
位于 MS.Internal.XcpImports.CheckThread()
位于 System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO)
位于 System.Windows.AssemblyPart..ctor()
位于 ClientSocket.InvokeReflection.infoDownloader_Completed(Object sender, DownloaderEventArgs e)}

虽然这个问题,我还没有解决,但希望在此提醒大家,异步加载的风险。



好了,最后拜托大家帮我想个解决方案,不吝赐教!!

你可能感兴趣的:(关于Silverlight动态加载的疑问)