亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#?WPF編程之Application類的使用詳解

 更新時間:2024年04月02日 15:31:42   作者:SongYuLong的博客  
每個運行中的WPF應(yīng)用程序都由System.Windows.Application類的一個實例來表示,該類跟蹤在應(yīng)用程序中打開的所有窗口,決定何時關(guān)閉應(yīng)用程序,下面就跟隨小編一起來深入了解下Application類的使用吧

應(yīng)用程序的生命周期

在WPF中,應(yīng)用程序會經(jīng)歷簡單的生命周期。本質(zhì)上,Visual Studio為Application類使用的模型與用于窗口的模型相同。起點是XAML模板,默認(rèn)情況下該模板命名為App.xaml:

創(chuàng)建Application對象

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>

StartupUri屬性來確定主窗口的XAML文檔。因此不需要代碼顯式地實例化窗口,XAML解析器自動完成這項工作。自動生成的部分在項目中是不可見的,看起來如下:

using System;
using System.Windows;
public partial class App:Application
{
    [STAThread()]
    public static void Main()
    {
        WpfApp3.App app = new WpfApp3.App();
        app.InitializeComponent();
        app.Run();
    }
    
    public void InitializeComponent()
    {
        this.StartupUri = new Uri("Window1.xaml", System.UriKind.Relative);
    }
    
}

應(yīng)用程序的關(guān)閉方式

通常,只要有窗口未關(guān)閉,Application類就保持應(yīng)用程序處于有效狀態(tài)。

可通過Appliaction.ShutdownMode屬性修改關(guān)閉模式,枚舉值:

  • OnLastWindowClose:默認(rèn)行為,只少有一個窗口存在,應(yīng)用程序就保持運行狀態(tài)。
  • OnMainWindowClose:傳統(tǒng)方式,只要主窗口還處于打開狀態(tài),應(yīng)用程序就保持運行狀態(tài)。
  • OnExplictitShutdown:除非調(diào)用Application.Shutdown()方法,否則應(yīng)用程序不會結(jié)束。

App.xaml文件中添加ShutdownMode=“OnMainWindowClose”

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml"
             ShutdownMode="OnMainWindowClose">
    <Application.Resources>
         
    </Application.Resources>
</Application>

應(yīng)用程序事件

App.xaml.cs文件里可添加代碼來處理應(yīng)用程序事件。

應(yīng)用程序事件:

  • Startup:該事件在調(diào)用Application.Run()方法之后,并且在主窗口顯示之前。
  • Exit:該事件在應(yīng)用程序關(guān)閉時,并在Run()方法即將返回之前發(fā)生。
  • SessionEnding:該事件在Window對話結(jié)束時發(fā)生。
  • Activated:當(dāng)激活應(yīng)用程序中的窗口是發(fā)生該事件。
  • Deactivated:當(dāng)取消激活用用程序中的窗口時發(fā)生該事件。
  • DispatcherUnhandledException:在應(yīng)用程序中的任何位置,只要發(fā)送未處理的異常,就會發(fā)生該事件。
  • 處理事件兩種方法:
  • 關(guān)聯(lián)事件處理程序;

重寫相應(yīng)的受保護(hù)方法。

關(guān)聯(lián)事件處理程序,如xmal中添加事件處理DispatcherUnhandledException=“Application_DispatcherUnhandledException”

App.xaml

<Application x:Class="WpfApp3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3"
             StartupUri="MainWindow.xaml"
             DispatcherUnhandledException="Application_DispatcherUnhandledException">
    <Application.Resources>
         
    </Application.Resources>
</Application>

App.xaml.cs:

private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{

}

代碼重寫事件方法窗口事件:

using System.Configuration;
using System.Data;
using System.Windows;

namespace WpfApp3
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {

        private bool unsaveDate = false;

        public bool UnsaveDate 
        {
            get { return unsaveDate; }
            set { unsaveDate = value; }
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            UnsaveDate = true;
        }

        protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
        {
            base.OnSessionEnding(e);

            if (UnsaveDate)
            { 
                e.Cancel = true;
                MessageBox.Show("測試:"+e.ReasonSessionEnding.ToString());
            }
        }        
    }
}

Application類的任務(wù)

顯示初始界面

WPF應(yīng)用程序的運行速度快,但并不能在瞬間啟動。第一次啟動應(yīng)用程序時,會有一些延遲,因為公共語言運行時(Common Language Runtime,CLR)首先需要初始化.NET環(huán)境,然后啟動應(yīng)用程序。通常這一延時時間很短。但如果具有更耗時的初始化步驟,可使用WPF提供的簡單初始界面特性,添加加初始界面的方法:

  • 為項目添加圖像文件(.bmp,.png,.jpg文件)。
  • 在Solution Explorer中選擇圖像文件。
  • 將Build Action修改為SplashScreen。

下次運行應(yīng)用程序時,圖像會立即在屏幕中央顯示出來。當(dāng)添加初始界面時,WPF編譯器為自動生成的App.cs文件添加與下面類似的代碼:

SplashScreen splashScreen = new SplashScreen("splashScreenImage.png");
splashScreen.show(true);
MyApplication.App app = new MyApplication.App();
app.InitializeComponent();
app.Run();

處理命令行參數(shù)

為處理命令行參數(shù),需要響應(yīng)Application.Startup事件。命令行參數(shù)是通過StartupEventArgs.Args屬性作為字符串?dāng)?shù)組提供的。

例如,假定希望加載文檔,文檔名作為命令行參數(shù)傳遞。通過代碼實例化主窗口。

public partial class App : Application
{
    private static void App_Startup(object sender, StartupEventArgs e)
    {
        FileViewer win = new FileViewer();
        if (e.Args.Length > 0)
        {
            string file = e.Args[0];
            if (System.IO.File.Exists(file))
            {
                win.LoadFile(file);
            }
            else
            {
                
            }
        }
    }
}

訪問當(dāng)前Application對象

通過靜態(tài)的Application.Current屬性,可在應(yīng)用程序的任何位置獲取當(dāng)前應(yīng)用程序的實例,從而在窗口之間進(jìn)行基本交互,任何窗口都可以訪問當(dāng)前Application對象,并通過Application對象獲取主窗口的引用:

Window main = Application.Current.MainWindow;
MessageBox.Show("The main window is " + main.Title);

如果希望訪問在自定義窗口類中添加的任意方法、屬性或事件,需要將窗口對象轉(zhuǎn)裝換為正確類型。

MainWindow main = (MainWindow)Application.Current.MainWindow;
main.DoSomething();

在窗口中還可以檢查Application.Windows集合的內(nèi)容:

foreach( Window window in Application.Current.Windows)
{
MessageBox.Show(window.Title + " is open.");
}

在窗口之間進(jìn)行交互

應(yīng)用程序類還可以很好地達(dá)到另一個目的:保存重要窗口的引用,使一個窗口可訪問另一個窗口。

窗口分為模態(tài)和非模態(tài):

  • 模態(tài)窗口:模態(tài)窗口會中斷應(yīng)用程序流,直到窗口關(guān)閉為止。
  • 非模態(tài)窗口:非模態(tài)窗口則不中斷應(yīng)用程序流。

示例,每個文檔窗口由名為Document的類實例表示:

public partial class App : Application
{
    private List<Document> documents = new List<Document>();
    public List<Document> Documents
    {
        get {return documents};
        set {documents = value;}
    }
}

下面是響應(yīng)按鈕點擊事件的處理程序:

private void cmdCreate_Click(object sender, RouteEventArgs e)
{
    Document doc = new Document();
    doc.Owner = this;
    doc.Show();
    ((App)Application.Current).Documents.Add(doc);
}

程序集資源

WPF應(yīng)用程序中的程序集資源與其他.NET應(yīng)用程序中的程序集資源在本質(zhì)上是相同的?;靖拍钍菫轫椖刻砑游募?,從二Visual Studio可將其嵌入到編譯過的應(yīng)用程序的EXE或DLL文件中。

添加資源

通過向項目添加文件,并在Properties窗口中將其Build Action屬性設(shè)置為Resource來添加資源。

為成功地使用程序集資源,未必注意一下兩點:

  • 不能將Build Action屬性錯誤地設(shè)置為Embedded Resource。
  • 不要在Project Properties窗口中使用Resource選項卡。

檢索資源

可以采用多種方法來使用資源。

低級方法是檢索封裝數(shù)據(jù)的StreamResourceInfo對象,然后決定如何使用該對象。

StreamResourceInfo sri = Application.GetResourceStream(new Uri(“images/winter.jpg”, UriKind.Relative));

XMAL:

<\Image Source=“Images/1.jpg”></Image>

使用BitmapImage對象,該對象使用URI確定希望顯示的圖像位置。

絕對路徑:

img.Source = new BitmapImage(new Uri((@“d:\Img\jpgs\2.jpg”));

相對路徑:

img.Source = new BitmapImage(new Uri(“images/6.jpg”, UriKind.Relative));

pack URI

WPF使用pack URI語法尋址編譯個的資源。使用相對URI來引用資源

內(nèi)容文件

當(dāng)嵌入式文件作為資源時,會將文件放到編譯過的程序集中,并且可以確保文件總是可用的。

如下情況不適合使用這種方法:

  • 希望改變資源文件,有不想重新編譯應(yīng)用程序;
  • 資源文件非常大;
  • 資源文件是可選的,并且可以不隨程序集一起部署;
  • 資源是聲音文件(WPF聲音類不支持程序集資源);

WPF為程序集添加了AssemblyAssociatedContentFile特性,聲明每個內(nèi)容文件的存在。

為項目添加音頻文件:

在Solution Explorer中選擇該文件,并在Properties中將Build Action屬性改為Content。

<\MediaElement Name=“Sound” Source=“Sounds/1.wav” LoadeBehavior=“Manual”></MediaElement>

到此這篇關(guān)于C# WPF編程之Application類的使用詳解的文章就介紹到這了,更多相關(guān)C# Application類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實現(xiàn)動態(tài)生成表格的方法

    C#實現(xiàn)動態(tài)生成表格的方法

    這篇文章主要介紹了C#實現(xiàn)動態(tài)生成表格的方法,是C#程序設(shè)計中非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • c#日期間隔計算示例

    c#日期間隔計算示例

    這篇文章主要介紹了c#日期間隔計算類,最后有使用方法,需要的朋友可以參考下
    2014-02-02
  • C#仿QQ實現(xiàn)簡單的截圖功能

    C#仿QQ實現(xiàn)簡單的截圖功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#語言模擬QQ實現(xiàn)屏幕選擇區(qū)域截圖功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • c#中多線程間的同步示例詳解

    c#中多線程間的同步示例詳解

    使用線程時最頭痛的就是共享資源的同步問題,處理不好會得到錯誤的結(jié)果,所以下面這篇文章主要給大家介紹了關(guān)于c#中多線程間同步的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C#ComboBox控件“設(shè)置 DataSource 屬性后無法修改項集合”的解決方法

    C#ComboBox控件“設(shè)置 DataSource 屬性后無法修改項集合”的解決方法

    這篇文章主要介紹了C#ComboBox控件“設(shè)置 DataSource 屬性后無法修改項集合”的解決方法 ,需要的朋友可以參考下
    2019-04-04
  • C#實現(xiàn)FTP上傳文件的方法

    C#實現(xiàn)FTP上傳文件的方法

    這篇文章介紹了C#實現(xiàn)FTP上傳文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#實現(xiàn)HTTP下載文件的方法

    C#實現(xiàn)HTTP下載文件的方法

    這篇文章主要介紹了C#實現(xiàn)HTTP下載文件的方法,包括了HTTP通信的創(chuàng)建、本地文件的寫入等,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • Unity?百度AI實現(xiàn)Logo商標(biāo)識別

    Unity?百度AI實現(xiàn)Logo商標(biāo)識別

    本文主要介紹了Unity實現(xiàn)檢測和識別圖片中的品牌LOGO信息。即對于輸入的一張圖片(可正常解碼,且長寬比適宜),輸出圖片中LOGO的名稱、位置和置信度。需要的可以參考一下
    2022-01-01
  • C#使用Region對圖形區(qū)域構(gòu)造和填充的方法

    C#使用Region對圖形區(qū)域構(gòu)造和填充的方法

    這篇文章主要介紹了C#使用Region對圖形區(qū)域構(gòu)造和填充的方法,實例分析了Region類圖形操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#?StackExchange.Redis?用法匯總

    C#?StackExchange.Redis?用法匯總

    StackExchange.Redis?是?C#?操作?Redis?數(shù)據(jù)庫的客戶端,本文通過圖文并茂的形式給大家介紹C#?StackExchange.Redis?用法匯總,感興趣的朋友一起看看吧
    2021-12-12

最新評論