您的位置:首页 > 其它

关于Silverlight动态加载的疑问

2011-04-27 18:14 218 查看
最近在搞sl的项目,正好用到动态加载,就找了一下。发现网上基本上都是用webClient下载,之后异步加载。

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

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

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

WebClient wc = new WebClient();

wc.OpenReadCompleted +=  infoDownloader_Completed;
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)}


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



好了,最后拜托大家帮我想个解决方案,不吝赐教!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: