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. 学习廖雪峰的git教程6--版本控制

    1git log 查看提交的版本 2git reset --hard HEAD^回退到上一个版本 3git reset --hard 版本号 回到某一个版本

  2. dp:找零问题

    C代表币的种类,n代表钱数 #include<iostream> using namespace std; #define C 4 void main( ) { int coin[4]={ ...

  3. 假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?

    使用 keys 指令可以扫出指定模式的 key 列表. 对方接着追问:如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会 有什么问题? 这个时候你要回答 redis 关键的一个特 ...

  4. 什么是openssl?

    在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份.这个包广泛被应用在互联网的网页服务器上.

  5. JDBC 中如何进行事务处理?

    Connection 提供了事务处理的方法,通过调用 setAutoCommit(false)可以设置 手动提交事务:当事务完成后用 commit()显式提交事务:如果在事务处理过程中 发生异常则通过 ...

  6. vmware克隆Centos虚拟机网卡无法启动问题

    快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...

  7. 『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别

    目录 1.CMD指令和ENTRYPOINT指令说明 2.CMD指令只有最后一条生效的原因 3.CMD指令演示 4.ENTRYPOINT指令演示 5.总结 CMD指令和ENTRYPOINT指令作用都是指 ...

  8. linux环境下搭建solr服务器--单机版

    前提需要在安装好jdk和tomcat,本人用的是jdk1.8+tomcat8.5+solr4.10. 第一步:安装linux.jdk.tomcat.(这步都是比较简单的,就不多说了) 第二步:把sol ...

  9. 完美解决 scipy.misc.imread 报错 TypeError: Image data cannot be converted to float

    File "/home/harrison/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 634, ...

  10. FR9833 32V转5V