2009-02-25 63 views
1

最近几个月,我的应用程序变得越来越大。它现在可以作为Wpf .EXE和XBAP运行,两者共享相同的代码。在应用程序的几个点上,应用程序锁定。在转换之后,我发现应用程序在这些时刻正在从GAC加载dll。从gac载入dll阻止应用程序

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

它以秒开始,但目前有些时候您需要等待几分钟才能继续应用。我认为这是不可接受的。

有没有办法将dll的加载从GAC移动到另一个线程?因此,“请稍候,加载应用程序” - 动画可以播放?或者,更好的办法是,我可以将所需的所有dll加载到应用程序的开始位置,以便在工作时减少等待时间。

回答

2

是的(对于“秒”,至少;不确定它缩放到“分钟”) - 在登录屏幕上,旋转一个工作线程(可能与ThreadPool),这需要那些程序集。这将导致他们加载...

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

您现在已经关闭UI线程,加载程序集,而用户键入他们的密码。

+0

我以为我尝试过这样的建筑,但这次它工作。谢谢! – Sorskoot 2009-02-25 08:53:05