Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从gac加载DLL正在阻止应用程序_.net_Wpf_Gac_Xbap - Fatal编程技术网

.net 从gac加载DLL正在阻止应用程序

.net 从gac加载DLL正在阻止应用程序,.net,wpf,gac,xbap,.net,Wpf,Gac,Xbap,在过去的几个月里,我的应用程序越来越大。目前它可以作为Wpf.EXE和XBAP运行,两者共享相同的代码。在应用程序中的某些点上,应用程序会锁定。在反转之后,我发现应用程序正在从GAC加载DLL 发生的情况是,应用程序启动,这需要几秒钟的时间,并且用户将看到一个登录屏幕。此时,用户单击OK按钮登录应用程序锁,因为它必须为应用程序的其余部分加载所有类型的DLL。因为它们是从UI线程加载的,所有动画都停止播放,所以OK按钮的鼠标悬停没有完成 它一开始只是几秒钟,但目前在某些情况下,你必须等待几分钟,然

在过去的几个月里,我的应用程序越来越大。目前它可以作为Wpf.EXE和XBAP运行,两者共享相同的代码。在应用程序中的某些点上,应用程序会锁定。在反转之后,我发现应用程序正在从GAC加载DLL

发生的情况是,应用程序启动,这需要几秒钟的时间,并且用户将看到一个登录屏幕。此时,用户单击OK按钮登录应用程序锁,因为它必须为应用程序的其余部分加载所有类型的DLL。因为它们是从UI线程加载的,所有动画都停止播放,所以OK按钮的鼠标悬停没有完成

它一开始只是几秒钟,但目前在某些情况下,你必须等待几分钟,然后应用程序才能继续。我认为这是无法接受的

有没有办法将DLL的加载从GAC移动到另一个线程?那么“应用程序加载时请稍候”-可以播放动画吗?或者,更好的是,我可以将加载所有需要的DLL移动到应用程序的开始,这样在工作时就可以减少等待时间。

是的(至少“秒”;不确定它是否扩展到“分钟”)-在登录屏幕上,只需启动一个工作线程(可能使用
线程池
)即可执行需要这些程序集的操作。这将导致它们加载

ThreadPool.QueueUserWorkItem(LoadAssemblies);
...
static void LoadAssemblies(object state)
{
    Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it)
}

您现在脱离了UI线程,在用户键入密码时加载程序集。

我想我已经尝试过这样的构造,但这次成功了。谢谢