最近几个月,我的申请越来越大。它现在可以作为wpf.exe和xbap运行,两者共享相同的代码。在应用程序中的几个点上,应用程序锁定。在反转之后,我发现应用程序此时正在从GAC加载DLL。
发生的情况是应用程序启动,这需要几秒钟的时间,并向用户显示登录屏幕。此时,用户单击“确定”按钮登录应用程序锁,因为它必须为应用程序的其余部分加载各种DLL。因为它们是从用户界面线程加载的,所有动画都停止播放,所以事件“确定”按钮的鼠标悬停没有完成。
开始的时候是几秒钟,但在某些时候,你需要等待几分钟才能继续应用程序。我认为这是不可接受的。
是否有方法将加载的DLL从GAC移动到另一个线程?所以“请稍候,正在加载应用程序”-动画可以播放吗?或者,更好的是,我可以将所有需要加载的DLL移动到应用程序的开始,这样在工作时等待的时间就更少了。
是(至少为“秒”;不确定它是否可扩展为“分钟”)—在登录屏幕上,只需旋转一个工作线程(可能与 ThreadPool )这样做需要这些程序集。这将导致它们加载…
ThreadPool
ThreadPool.QueueUserWorkItem(LoadAssemblies); ... static void LoadAssemblies(object state) { Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it) }
现在您已经脱离了UI线程,在用户键入密码时加载程序集。