双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

关于Silverlight动态加载的疑问

Pegasuscc Pegasuscc 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近在搞sl的项目,正好用到动态加载,就找了一下。发现网上基本上都是用webClient下载,之后异步加载。

当然了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)}

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




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


...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
Pegasuscc
WPF/Silverlight 8,757 成员 12,031 内容