关于Silverlight动态加载的疑问
当然了SL只能异步加载,但是我使用了压力测试的情况下发现,事情没有这么简单。
首先MSDN上明确指定这个异步加载的方式,在不阻止调用线程的情况下.
之后好玩的事出来了,首先是在webclient下载前线程为1
WebClient wc = new WebClient();
wc.OpenReadCompleted += infoDownloader_Completed;
wc.OpenReadAsync(new Uri(msg.NameSpace, UriKind.Relative));
之后到了infoDownloader_Completed时,线程数变了,改为7
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);
重点来了,这时new AssemblyPart报错了,
错误信息如下:
{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完美入门.pdf
主要对silerlight进行了原理与实践讲解,配有清晰的图片和文字,初学者的好资料,高清资料,看着爽,看书与看电影一样需要看高清的。
Silverlight动态加载dll
Silverlight中动态加载dll文件 private void btnGetResource_Click(object sender, RoutedEventArgs e) { Grid grid = this.FindName("grid") as Grid; if(grid.Children.Count==0) { WebClient webClient = new WebClient(); webClient.DownloadProgressChanged += webClient_DownloadProgressChanged; webClient.OpenReadCompleted += webClient_OpenReadCompleted; //注意:一定要压缩成Zip格式的文件,rar是不支持的 webClient.OpenReadAsync(new Uri("ResouceDll.zip", UriKind.Relative)); } }
Silverlight动态加载外部XML指定地址的WebService源码例子
Silverlight动态加载外部XML指定地址的WebService源码例子
silverlight图表oxyplot例子--动态加载XAML
silverlight图表oxyplot例子--动态加载XAML
使用silverlight的WebService加载动态库并完成发布
使用silverlight加载c++写的动态库,并在iis7上完成发布。



