首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了使用子类之外,是否有一种在实例化应用程序对象时得到通知的方法?

除了使用子类之外,是否有一种在实例化应用程序对象时得到通知的方法?
EN

Stack Overflow用户
提问于 2022-09-03 17:58:52
回答 1查看 56关注 0票数 0

由于有了高级初始化场景(正如文档中警告的那样),我们正在利用ModuleInitializer属性在模块初始化时运行一些代码,如下所示.

代码语言:javascript
运行
复制
[ModuleInitializer]
public static void InitModule() {
    // Do something with the app here
}

但是,根据加载模块的方式,我们发现了行为上的差异。特别是..。

  • 如果通过项目引用/依赖项加载,则Application.Current属性不是集。
  • 如果通过反射动态加载,则Application.Current属性集。

由于我们需要对当前应用程序进行部分初始化访问(仅当应用程序存在时,它不必立即运行),因此我们的初始方法是在初始化过程中,测试是否设置了Application.Current。如果是这样的话,就像往常一样使用它。如果不是,构建某种类型的“操作队列”,将我们想要运行的所有操作排队起来,然后从Application类的构造函数中处理该队列。

因此,上面的内容变成了.

代码语言:javascript
运行
复制
[ModuleInitializer]
public static void InitModule() {

    void appRelatedInitialization(Application application) {
        // Do something with the app here
    }

    if(Application.Current is not null) {
        appRelatedInitialization(Application.Current);
    }
    else {
        // Add the method to a queue of actions which take an Application as an argument
        Globals.AppInitQueue.Add(appRelatedInitialization);
    }
}

但是,我们遇到了一个不使用Application子类的应用程序,而是选择了一个main方法,并在那里完成了所有的应用程序配置。

当然,我们可以在那里添加队列处理,就像使用初始化器和子类一样,但是我们真正想要的是知道什么时候应用程序被实例化,而不管是什么类型的应用程序,并且让这个应用程序自动地为我们执行,这样我们就不必在任何地方添加它。

问题是,Application.Current是一个不使用INotifyPropertyChanged或类似的静态POCO属性,因此我们不确定如何确定什么时候设置了应用程序实例。我们也不想使用暴力轮询,因为这是最糟糕的一种代码气味。

那么,如何确定何时创建了当前的Application对象并将其分配给正在运行的进程?

EN

Stack Overflow用户

发布于 2022-09-04 11:09:31

如果还没有创建当前线程,Dispatcher.CurrentDispatcher将为当前线程创建一个调度程序,这将由Application.Run()启动,因此您应该能够这样做

代码语言:javascript
运行
复制
Dispatcher.CurrentDispatcher.BeginInvoke(() => {})

我尝试过这样做,如果您将Dispatcher.Priority保留为默认值,它将在App构造函数和App_Startup被调用之后运行。

(如果您希望它更早地运行,您可以这样做 Dispatcher.CurrentDispatcher.BeginInvoke(() => {},DispatcherPriority.Send); 在这种情况下,它将在应用程序构建之后运行,但在App_Startup之前运行,尽管阅读了源代码,但由于一些bug,它们似乎显式地尝试首先运行OnStartup,而这正是为了避免这种情况。我不知道这样做的后果。)

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73594385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档