1

在过去的几个月里,我的申请变得越来越大。目前它可以作为 Wpf .EXE 和 XBAP 运行,两者共享相同的代码。在应用程序的几个点,应用程序锁定。经过调查后,我发现应用程序此时正在从 GAC 加载 dll。

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

它从几秒钟开始,但在某些时候,您必须等待几分钟才能继续应用。我认为这无可厚非。

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

4

1 回答 1

2

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

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

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

于 2009-02-25T07:41:42.463 回答