最近几个月,我的申请越做越大。它目前可以像Wpf .EXE和XBAP一样运行,两者共享相同的代码。在应用程序的几个点上,应用程序锁定。在进行反转之后,我发现应用程序正在加载来自GAC的dll。
应用程序启动会发生什么,这需要几秒钟,并向用户显示登录屏幕。用户单击“确定”按钮以登录应用程序锁定,因为它必须为应用程序的其余部分加载各种dll。因为它们是从UI线程加载的,所有动画都停止播放,所以OK按钮的鼠标悬停没有完成。
它开始时只有几秒钟,但是在某些时刻,你需要等待几分钟才能继续应用。我认为这是不可接受的。
有没有办法将dll从GAC加载到另一个线程?所以“请等待应用程序加载” - 可以播放动画吗?或者,更好的是,我可以移动应用程序启动所需的所有dll的加载,因此工作时等待的时间会更少。
答案 0 :(得分:2)
是(至少为“秒”;不确定它会缩放到“分钟”) - 在登录屏幕上,只需启动一个工作线程(可能带有ThreadPool
),它可以执行需要这些程序集的操作。这将导致他们加载......
ThreadPool.QueueUserWorkItem(LoadAssemblies);
...
static void LoadAssemblies(object state)
{
Widget1 widget = new Widget1(); // but just let it go (perhaps dispose it)
}
您现在已离开UI线程,在用户输入密码时加载程序集。