【问题标题】:WPF - Display usercontrol dll's name as they load in splash screenWPF - 在初始屏幕中加载时显示用户控件 dll 的名称
【发布时间】:2014-03-18 21:09:09
【问题描述】:

我正在编写一个 WPF 应用程序,该应用程序承载了我编写的 10 多个用户控件。我想做的是修改这篇文章中“Wonko the Sane”的答案中的代码

Is there a way to show a splash screen for WPF application?

在加载时动态显示这些用户控件 dll 的名称。

我无法在任何地方找到如何在加载 dll 时获取它们的名称。

我们将不胜感激。

谢谢,吉姆

【问题讨论】:

    标签: wpf dll user-controls


    【解决方案1】:

    抱歉,您不能这样做。 WPF 框架在您的程序开始执行之前加载。您能做的最好的事情是将相关 DLL 的名称添加到 string 集合中,然后遍历它们,暂时显示每个。即使您可以显示正在加载的内容,也有可能它们实际上加载得如此之快,以至于您无论如何都看不到任何内容。

    还值得指出的是,只有 真正 值得在 WPF 应用程序中使用启动屏幕,如果您有大量的初始化加载工作真正 要做。在这种情况下,您可以显示应用程序正在做什么,但您可能会发现在大多数情况下,加载速度仍然太快,UI 无法及时更新。

    【讨论】:

    • 因为加载它需要 5 秒以上的时间,所以即使它不是名称也会有一些指示。大多数控件都有一个 OnLoaded 事件并设置公共参数供其他控件使用,所以这需要一点时间。
    • 我不知道您正在使用的那个控件,但您可能必须使用异步调用才能在后台任务中加载任何内容时在启动画面中更新文本...也许是这样的:splashScreen.Dispatcher.BeginInvoke((Action)(() => splashScreen.Status = "Loading something..."));
    【解决方案2】:

    您可以获取当前应用程序域,然后使用 AssemblyLoad 事件获取加载的 Dll 名称。

    AppDomain MyDomain = AppDomain.CurrentDomain;
    MyDomain.AssemblyLoad += new AssemblyLoadEventHandler(SplashControllerObject.LocalEventHandler);
    
    
    private void LocalEventHandler(object sender, AssemblyLoadEventArgs args)
    {
    //use sender.LoadedAssembly.FullName   for DLL name loaded
    }
    

    【讨论】:

    • 我会试一试,让你知道它是怎么回事。正如我所提到的,这需要一些时间,因为我现在要加载 15 个以上的 dll。
    • 我试过了,但没用 var _myDomain = AppDomain.CurrentDomain; _myDomain.AssemblyLoad += 新的 AssemblyLoadEventHandler(MyAssemblyLoadEventHandler); static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args) { Debug.WriteLine("ASSEMBLY LOADED:" + args.LoadedAssembly.FullName); Debug.WriteLine(Environment.NewLine); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多