.net 从gac加载DLL正在阻止应用程序
在过去的几个月里,我的应用程序越来越大。目前它可以作为Wpf.EXE和XBAP运行,两者共享相同的代码。在应用程序中的某些点上,应用程序会锁定。在反转之后,我发现应用程序正在从GAC加载DLL 发生的情况是,应用程序启动,这需要几秒钟的时间,并且用户将看到一个登录屏幕。此时,用户单击OK按钮登录应用程序锁,因为它必须为应用程序的其余部分加载所有类型的DLL。因为它们是从UI线程加载的,所有动画都停止播放,所以OK按钮的鼠标悬停没有完成 它一开始只是几秒钟,但目前在某些情况下,你必须等待几分钟,然后应用程序才能继续。我认为这是无法接受的 有没有办法将DLL的加载从GAC移动到另一个线程?那么“应用程序加载时请稍候”-可以播放动画吗?或者,更好的是,我可以将加载所有需要的DLL移动到应用程序的开始,这样在工作时就可以减少等待时间。是的(至少“秒”;不确定它是否扩展到“分钟”)-在登录屏幕上,只需启动一个工作线程(可能使用.net 从gac加载DLL正在阻止应用程序,.net,wpf,gac,xbap,.net,Wpf,Gac,Xbap,在过去的几个月里,我的应用程序越来越大。目前它可以作为Wpf.EXE和XBAP运行,两者共享相同的代码。在应用程序中的某些点上,应用程序会锁定。在反转之后,我发现应用程序正在从GAC加载DLL 发生的情况是,应用程序启动,这需要几秒钟的时间,并且用户将看到一个登录屏幕。此时,用户单击OK按钮登录应用程序锁,因为它必须为应用程序的其余部分加载所有类型的DLL。因为它们是从UI线程加载的,所有动画都停止播放,所以OK按钮的鼠标悬停没有完成 它一开始只是几秒钟,但目前在某些情况下,你必须等待几分钟,然
线程池
)即可执行需要这些程序集的操作。这将导致它们加载
ThreadPool.QueueUserWorkItem(LoadAssemblies);
...
static void LoadAssemblies(object state)
{
Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it)
}
您现在脱离了UI线程,在用户键入密码时加载程序集。我想我已经尝试过这样的构造,但这次成功了。谢谢