Application

应用程序类Application,以下代码自动生成且在程序中不可见,定义程序入口点方法以及程序启动程序,整个程序生命周期为执行完Main()方法里的程序。对于自定义的应用程序通过将窗体作为参数传递给Run()方法,第一个传入Run()方法的窗体将作为应用程序的主窗体。

public partial class App : Application
{
/// <summary>
/// Application Entry Point. 程序入口
/// </summary>
[System.STAThreadAttribute()]
public static void Main()
{
MicrosoftDeom.App app = new MicrosoftDeom.App();
app.InitializeComponent();
app.Run();
} public void InitializeComponent()
{
this.StartupUri = new System.Uri("Window2.xaml",System.UriKind.Relative);
}
} //自定义程序 写法1
Application app=new Application();
Window1 win=new Window1();
app.run(win); //自定义程序 写法2
Application app=new Application();
Window1 win=new Window1();
app.MainWindow=win;
win.show();
app.run();

关闭方式

  • OnLastWindowClose:只要有一个窗体还存在,应用程序保持运行。

  • OnMainWindowClose:当主窗体关闭是程序关闭。

  • OnExplicitShutDown:程序永不结束,只有主动调用Application.ShutDown()方法结束程序。

当调用Application.ShutDown()方法程序不会立即停止,而是立即返回Applicaiton.Run()方法,任然可以执行Main()方法里的其他代码或者响应Application.Exit事件。

应用程序事件

  • StartUp:该事件调用在Application.Run()之后,在主窗体显示之前发生。使用该事件检查命令行参数,StartupEventArgs.Args作为数组提供。可以不使用StartUri使用该事件来创建显示主窗体。

  • Exit:该事件在应用程序关闭时,并且在Run()方法即将返回之前发生。

  • SessionEnding:该事件在Windows对话结束时发生。

  • Activated:当程序中的第一个窗口被激活时发生,或从另一个Windows程序切换到该应用程序时发生。当第一次显示一个窗口时也会发生该事件。 (运行程序触发了多次此事件)

  • Deactivated:窗体被取消激活是发生该事件,切换到另一个Windows程序时发生。

  • DIspatcherUnhandledException:应用程序任何位置发生一个未处理的异常就会触发该事件。DispatcherUnhandledExceptionEventArgs.Handled设置为true继续运行程序,需要确保程序处于合法状态。

以上事件可以在App.xaml中关联事件处理器,或者在C#代码中重载默认订阅以上事件的方法。

<Application x:Class="应用程序事件.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:应用程序事件"
StartupUri="MainWindow.xaml" Startup="Application_Startup">
</Application>
private void Application_Startup(object sender, StartupEventArgs e){}

//重载
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
}

Application类的任务

显示初始化界面

在项目中添加图片,格式(.Jpg .bmp .Png),将图片Build Action改为SplashScreen。也可以通过在Run()方法之前添加代码来实现界面褪去的速度和效果。(SplashScreen类)

处理命令行参数

protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
FileViewer win = new FileViewer();
if (e.Args.Length > 0)
{
string file = e.Args[0];
if (System.IO.File.Exists(file))
{
win.LoadFile(file);
}
}
win.Show();
} public class FileViewer : Window
{
public void LoadFile(string path)
{
this.Content = File.ReadAllText(path);
this.Title = path;
}
}

访问当前Application对象

通过静态Application.Current属性可以在程序任何位置访问到当前应用程序实例。Application.Current.MainWindow当前程序主窗体。Application.Current.Windows当前程序打开的窗体集合。当窗体关闭时,窗体将从集合中移除。

窗体之间进行交互

通过保存窗口的引用来访问该窗口,Applicaion.Current.Windows中窗口的位置可能会发生变化。窗体间交互一般用于非模态窗口,通过Application.Current属性来对自定义的窗体集合进行操作,保存窗体的索引以便在应用程序其他地方访问该窗体。适用于基于文档的应用程序等。(模态窗口会终端应用程序的执行直到窗口被关闭,非模态窗口则不会中断应用程序的执行)

单例应用程序

1)创建单例程序包装器

public class SingleInstanceApplicationWrapper : WindowsFormsApplicationBase
{
public SingleInstanceApplicationWrapper()
{
//是否单例
this.IsSingleInstance = true;
}
private MyApp app;
protected override bool OnStartup(StartupEventArgs eventArgs)
{
app = new MyApp();
app.Run(new MainWindow());
return false;
}
/// <summary>
/// 当另一个应用程序实例启动时触发 在.Framework4.5 可触发 .Net5无法触发
/// </summary>
/// <param name="eventArgs"></param>
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
}
}
public class Start
{
[STAThread]
public static void Main(string[] args)
{
SingleInstanceApplicationWrapper app = new SingleInstanceApplicationWrapper();
app.Run(args);
}
}

程序集资源

//获取二进制资源流
StreamResourceInfo si = Application.GetResourceStream(new Uri("5.jpg", UriKind.Relative));
  <Image X:Name="img" Source="Images/5.jpg" />
//绝对路径
img.Source = new BitmapImage(new Uri(@"C:\Users\13350\Desktop\Images\1.jpg"));
//相对路径
img.Source = new BitmapImage(new Uri("Images/5.jpg", UriKind.Relative));
//位于同一程序集时
img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/5.jpg"));
//位于不同程序集时
img.Source = new BitmapImage(new Uri("pack://application:,,,/ResourceLib.NET4.5;Component/Images/dmcat.jpg"));
img.Source = new BitmapImage(new Uri("ResourceLib.NET4.5;Component/Images/dmcat.jpg", UriKind.Relative));

类容文件设置BuildActionContentCopy to Output Directory使用 Always Copy使用相同的URI系统。

<MediaElement Source="pack://application:,,,/ClassLibrary1;Component/Images/vido.mp4" Grid.Row="1" LoadedBehavior="Play"/>

WPFApplication类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C# 根据类名称创建类示例

    //获得类所在的程序集名称(此处我选择当前程序集) string bllName = System.IO.Path.GetFileNameWithoutExtension(System.Reflect ...

  3. Application全局应用程序类

    当一个WPF应用程序启动时,先会实例化一个全局的唯一的Application.如果开发人员熟悉Windows Form编程,会知道在SystemWindowsForm命名空间中有一个Applicati ...

  4. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  5. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  8. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  9. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

随机推荐

  1. C++ 并发编程1

    一个简单的并发编程的举例 #include <iostream> #include <thread> using namespace std; void hello(){ co ...

  2. HTML、JavaScript、Java、CSS它们的注释有哪些相同和不同?

    <!--html--> /*css*/ //javascript /*javascript*/

  3. 简述 Mybatis 的插件运行原理,以及如何编写一个插件。

    Mybatis 仅可以编写针对 ParameterHandler.ResultSetHandler. StatementHandler.Executor 这 4 种接口的插件,Mybatis 使用 J ...

  4. Zookeeper 下 Server 工作状态 ?

    服务器具有四种状态,分别是 LOOKING.FOLLOWING.LEADING.OBSERVING. 1.LOOKING:寻找 Leader 状态.当服务器处于该状态时,它会认为当前集群中 没有 Le ...

  5. 学习openstack(八)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  6. 学习Redis(三)

    一.安装部署 1.常规安装 1.安装 # wget http://download.redis.io/releases/redis-3.0.7.tar.gz # tar xf redis-3.0.7. ...

  7. 学习MFS(四)

    一.搭建Master Server 1.安装相关编译器.工具包 [root@master ~]# yum -y install gcc gcc-c++ zlib-devel 2.创建进程用户 [roo ...

  8. layui表单使用开关滑块和复选框,渲染后台数据方法

    提示:整个表格要在form标签内 定义开关模板 <div class="layui-form" lay-filter="layuiadmin-app-form-li ...

  9. 纯css模拟电子钟

    先看效果 演示地址: https://yueminhu.github.io/di...点击左边拉环切换夜间模式. 用到了伪元素生成数字的小三角`currentColor和color: inherit` ...

  10. 用vue开发一个猫眼电影web app

    前言:之前一直在学习原生的javascript,但是无奈功力太浅,学了很长时候也只能写一些简单的小demo,知道遇见了vue,一切都变了,他的双向绑定和组件化思想让我迅速的爱上了他,可是光学不练是没有 ...