当前位置: 首页 > article >正文

WPF_Application

文章目录

  • Application
    • 1 Application类
      • 1.1 定义
      • 1.2 示例
      • 1.3 附注
    • 2 Application常用属性
      • 2.1 Current
      • 2.2 Dispatcher
    • 3 总结


Application

1 Application类

1.1 定义

该类封装了一个WPF应用程序。
在这里插入图片描述
该类派生自DispatcherObject,实现了IQueryAmbient接口。

1.2 示例

以下代码展示了用标签定义一个标准的Application:

<!--在WPF应用程序工程模板的App.xaml中可以看到类似代码-->
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"/>

下面代码展示了如何用代码来定义一个标准的Application:

using System;
using System.Windows;

namespace SDKSample
{
    public class AppCode : Application
    {
        // Entry point method
        [STAThread]
        public static void Main()
        {
            AppCode app = new AppCode();
            app.Run();
        }
    }
}

下面代码展示了标签结合后台代码来定义一个标准的Application,WPF模板程序就是这种方式,

<Application 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  x:Class="SDKSample.App" />
using System.Windows;

namespace SDKSample
{
	public partial class App : Application { }
}

1.3 附注

Application是一个类,它封装了WPF程序特有的功能,包含以下这些:

  • 应用程序的生命周期 :Activated, Current, Deactivated, DispatcherUnhandledException, Exit, Run, SessionEnding, Shutdown, ShutdownMode, Startup.
  • 应用程序域/范围的窗口、属性和资源管理 :FindResource, GetContentStream, GetResourceStream, LoadComponent, MainWindow, Properties, Resources, StartupUri, Windows.
  • 命令行参数和退出代码处理 :Application.Startup, Application.Exit, Application.Shutdown.
  • 导航 :FragmentNavigation, LoadCompleted, Navigated, Navigating, NavigationProgress, NavigationStopped, NavigationFailed, SetCookie, GetCookie.

Application实现了单例模式(singleton pattern),以提供对其窗口、属性和资源作用域服务的共享访问。因此,每个AppDomain只能创建一个Application类的实例。

AppDomain(应用程序域)


应用程序域由 AppDomain 对象表示,它们为执行托管代码提供隔离、卸载和安全边界。
似乎在你的工程代码中看不到它,因为它是CLR的执行单元。
应用程序域是每个应用程序独立的一块区域,它为Application执行提供了隔离环境,暂时理解到这就行。

你可以使用标签(Markup)、标签结合后台代码或者仅用代码来实现一个Application。若Application是用标签实现的,无论是标签还是标签结合后台代码,标签文件必须配置为Microsoft构建引擎(MSBuild) ApplicationDefinition 项。

注意


独立应用程序不需要Application对象;可以实现一个自定义的static入口点方法(Main),打开一个窗口而不创建应用程序实例。不过,XAML浏览器应用程序(XBAPs)需要一个Application对象。

2 Application常用属性

2.1 Current

它表示当前正在运行的WPF应用程序的Application实例,用于获取当前AppDomain的Application对象。
Application是每个AppDomain的单例类型,它实现了静态的Current属性,为当前AppDomain提供对Application实例的共享访问。这种设计确保了状态(包括共享资源和状态)由Application管理,可以从单个共享位置访问。

该属性是线程安全的,并且可以从任何线程访问
在这里插入图片描述

2.2 Dispatcher

先看下继承关系:
在这里插入图片描述
Application是DispatcherObject的子类,且每个DispatcherObject都有关联的Dispatcher,而Dispatcher是用于管理线程工作项队列的调度器。
在这里插入图片描述
因此该属性的作用是获取该DispatcherObject(即Application)关联的Dispatcher。
那么问题来了,
Application封装了一个WPF应用程序,与之关联的Dispatcher是啥呢?
如果你看过WPF的线程模型,应该不难猜到,该Dispatcher是用来管理UI线程的工作项队列的(WPF是单线程模型)。再结合Application实现了单例模式,我们通常可以用Application.Current.Dispatcher在后台线程中要求UI线程代表其执行操作。

3 总结

  • Application类封装了一个WPF应用程序。
  • Application实现了单例模式(Singleton Pattern),以提供对其窗口、属性和资源作用域服务的共享访问。通过Application.Current访问。
  • 通过Application.Current.Dispatcher可以将操作排队到UI线程中执行,这在跨线程操作中非常有用。

http://www.kler.cn/a/11789.html

相关文章:

  • Autosar CP 基于CAN的时间同步规范导读
  • flink sql + kafka + mysql 如何构建实时数仓
  • AcWing 302 任务安排 斜率优化的dp
  • 【前端】Vue中如何避免出现内存泄漏
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • python输入矩阵的方法
  • 融云出海赋能会干货回顾 | 用户增长、场景玩法、安全合规实用指南
  • 资深PM赞不绝口的【9种项目管理图】
  • 跳槽进阿里了,其实也没那么难...
  • ( “树” 之 DFS) 671. 二叉树中第二小的节点 ——【Leetcode每日一题】
  • mulesoft MCIA 破釜沉舟备考 2023.04.17.12
  • Spring Cloud Nacos使用总结
  • Windows 10系统,JDK安装与环境变量配置
  • 代码随想录算法训练营第四十四天|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
  • 使用 TensorFlow 构建机器学习项目:6~10
  • Maven 强制安装Jar包到仓库
  • FMCW激光雷达,未来已来
  • 【Prompt使用技巧】
  • JavaEE初阶学习:文件操作
  • HBU 2023 Simple problem set
  • win10彻底永久关闭自动更新【亲测有效】
  • 刷题_32:淘宝网店 and 斐波那契凤尾
  • Parcel 实践指南
  • 【已解决】加载模型时报错:model_config = json.loads(model_config.decode(‘utf-8‘))
  • 室内P1.8超清LED无缝拼接LED显示屏详细介绍及显示效果和尺寸长高比例