WPF学习之路(七)应用程序和窗口_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF学习之路(七)应用程序和窗口

WPF学习之路(七)应用程序和窗口

 2015/4/17 16:18:20  alex_cool  程序员俱乐部  我要评论(0)
  • 摘要:手动创建应用程序1.创建EmptyProject2.添加引用3.添加ManualApp.cs并添加下面的代码[STAThread]publicstaticvoidMain(){Windowwin=newWindow();win.Title="Manuallycreatedapplication";win.Show();Applicationapp=newApplication();app.Run();}[STAThread]单线程模型4.执行该程序会多出现一个控制台窗口
  • 标签:程序 学习 应用 应用程序

手动创建应用程序

1.创建Empty Project

2.添加引用

3.添加 ManualApp.cs 并添加下面的代码

[STAThread]
public static void Main()
{
    Window win = new Window();
    win.Title = "Manually created application";
    win.Show();
    Application app = new Application();
    app.Run();
}
[STAThread] 单线程模型

4.执行该程序会多出现一个控制台窗口,可以修改Project的Output Type

 

 通过向导创建应用程序

Main函数实现在  \obj\Debug\App.g.cs中

 

 

 

应用程序的生命周期

Application开始Run以后,进入消息循环,不断响应并处理事件

 

应用程序入口

应用程序入口都是Main函数,两种主要类型的对象Application\Window,前者在全局中是唯一的可以通过Application.Current获取。

[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
    Alex_WPFAPPDemo04.App app = new Alex_WPFAPPDemo04.App();
    app.InitializeComponent();
    app.Run();
}

 

 

应用程序起点

第一个响应的事件是Startup

App.xaml中默认使用下面的方式

<Application x:Class="Alex_WPFAPPDemo04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_StartUp">

稍作修改,会最先进入到Application_StartUp事件处理方法

<Application x:Class="Alex_WPFAPPDemo04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_StartUp">

 

 

应用程序的状态

应用程序有两种状态,Actived/Deactived,WPF可以通过Actived/Deactived事件来处理这两种状态

<Application x:Class="Alex_WPFAPPDemo04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             Activated="Application_Actived"
             Deactivated="Application_Deactived">

 

 

应用程序的异常

<Application x:Class="Alex_WPFAPPDemo04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             DispatcherUnhandledException="Application_DispatcherUnhandledException">

当应用程序发生异常时,会触发DispatcherUnhandledException事件,实现该事件处理逻辑可以防止程序崩溃

 

 

非正常退出

 当操作系统关机、重启注销等操作时,应用程序会接受SessionEnding事件,通过设置Cancel属性可以组织操作系统的关机、重启、注销等操作

<Application x:Class="Alex_WPFAPPDemo04.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             SessionEnding="Application_SessionEnding">
private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
{
    string msg = string.Format("{0}. End Session?", e.ReasonSessionEnding);
    MessageBoxResult result = MessageBox.Show(msg, "Session Ending", MessageBoxButton.YesNo);
    if (result == MessageBoxResult.No)
    {
        e.Cancel = true;
    }
}

 

 

正常退出

当关闭应用程序主窗口、所有窗口、显示调用Shutdown函数时,程序会正常退出

这3种情况由ShutdownMode属性决定

  // Summary:
    //     Specifies how an application will shutdown. Used by the System.Windows.Application.ShutdownMode
    //     property.
    public enum ShutdownMode
    {
        // Summary:
        //     An application shuts down when either the last window closes, or System.Windows.Application.Shutdown()
        //     is called.
        OnLastWindowClose = 0,
        //
        // Summary:
        //     An application shuts down when either the main window closes, or System.Windows.Application.Shutdown()
        //     is called.
        OnMainWindowClose = 1,
        //
        // Summary:
        //     An application shuts down only when System.Windows.Application.Shutdown()
        //     is called.
        OnExplicitShutdown = 2,
    }

Shutdown函数有两种形式,不传任何参数、传入Int作为ExitCode

 

 

 

 

 

 

 

 

 

 

To be continue...

上一篇: 基于C#在WPF中使用斑马打印机进行打印 下一篇: 没有下一篇了!
发表评论
用户名: 匿名