代码之家  ›  专栏  ›  技术社区  ›  Sorskoot

从GAC加载DLL正在阻止应用程序

  •  1
  • Sorskoot  · 技术社区  · 17 年前

    最近几个月,我的申请越来越大。它现在可以作为wpf.exe和xbap运行,两者共享相同的代码。在应用程序中的几个点上,应用程序锁定。在反转之后,我发现应用程序此时正在从GAC加载DLL。

    发生的情况是应用程序启动,这需要几秒钟的时间,并向用户显示登录屏幕。此时,用户单击“确定”按钮登录应用程序锁,因为它必须为应用程序的其余部分加载各种DLL。因为它们是从用户界面线程加载的,所有动画都停止播放,所以事件“确定”按钮的鼠标悬停没有完成。

    开始的时候是几秒钟,但在某些时候,你需要等待几分钟才能继续应用程序。我认为这是不可接受的。

    是否有方法将加载的DLL从GAC移动到另一个线程?所以“请稍候,正在加载应用程序”-动画可以播放吗?或者,更好的是,我可以将所有需要加载的DLL移动到应用程序的开始,这样在工作时等待的时间就更少了。

    1 回复  |  直到 17 年前
        1
  •  2
  •   Marc Gravell    17 年前

    是(至少为“秒”;不确定它是否可扩展为“分钟”)—在登录屏幕上,只需旋转一个工作线程(可能与 ThreadPool )这样做需要这些程序集。这将导致它们加载…

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

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

    推荐文章