WPF應用程式的生命週期

2022-01-30 07:16:20 字數 3841 閱讀 8848

廢話不羅嗦看招:使用者雙擊應用程式--->作業系統啟動應用程式--->執行run函式程式啟動--->觸發乙個startup事件

先說到這讓我們先分析一下以上執行週期

接下來讓我們看看startup事件的定義

ok,寫的很清楚在run()函式被呼叫之後緊接著就發生了,當然我們沒有看到startup函式,這只是定義

private

sender,startupeventargs e)

實際上在我們建立wpf程式的時候,vs已經幫我們做了更好的處理,我們是見不到如上所示的**的

startupuri="mainwindow.xaml"

觸發了startup事件後,如果沒有異常的話(當然不排除有異常的情況,這個我們暫且不表留待下文)主視窗就會呈現在你的面前,

大家都知道alt+tab組合鍵的妙用,這正是用來切換應用程式的狀態的。

接著讓我們製造些異常來看看是否會彈出提示

在mainwindow.xaml檔案中寫乙個按鈕click事件

private

void button_click(object

sender, routedeventargs e)

按ctrl+f5啟動應用程式,點選按鈕,看到如下所示

當點選確定時,我們會看到應用程式還是立刻退出了,這是怎麼回事?其實在dispatcherunhandledexception

中引數e的型別是dispatcherunhandledexceptioneventargs,讓我們對它一**竟同上f12轉到定義就會看到,它有兩個屬性,如下:

public

sealed

class

dispatcherunhandledexceptioneventargs : dispatchereventargs

////

摘要:

//獲取或設定是否已處理異常事件。

////

返回結果:

//如果異常已得到處理,則為 true;否則為 false。

public

bool handled

}

這兩個屬性我們在處理異常時都會用的到,剛才我們只是「攔截」了異常,但是沒有處理,真正要做到處理,就要這樣做,將e.handled屬性設定為true.

private

sender, dispatcherunhandledexceptioneventargs e)

sessionending="

"

private

sender, sessionendingcanceleventargs e)

還沒有寫任何處理**,先不急我們先來看看這個函式的引數。sender引數代表的是乙個wpf應用程式,這個想必我不說大家也知道,那我們就來仔細分析一下第二個引數,f12轉到該引數類的定義檔案如下:

//

摘要:

//public

class

sessionendingcanceleventargs : canceleventargs

}

大家一看就明白了,我就不說廢話了,reasonsessionending 屬性表示wpf程式結束的原因

它是乙個類,讓我們再**一下這個類中寫了什麼,f12. ok,真相大白天下

//

摘要:

//指定使用者會話正在結束的原因。 由 system.windows.sessionendingcanceleventargs.reasonsessionending

//屬性使用。

public

enum

reasonsessionending

sorry,原來它是乙個列舉,有兩個值,很簡單,再回過頭來我們繼續看sessionendingcanceleventargs類。發現它繼承canceleventargs,說到繼承大家都清楚,子類繼承父類就具有了父類的屬性.讓我們看看canceleventargs類:

//

摘要:

//獲取或設定指示是否應取消事件的值。

////

返回結果:

//如果應取消事件,則為 true;否則為 false。

public

bool cancel

它就乙個屬性,cancel。看到這,聰明的大家該知道如何寫

sessionending處理函式了吧。隨便寫寫,如下:

private

sender, sessionendingcanceleventargs e)

程式生命週期最後一步,【退出】

看上圖,我們來一一解析三個值

onexplicitshutdown:表示顯示呼叫shutdown函式關閉應用程式

onlastwindowclose:表示關閉所有視窗時應用程式退出

onmainwindowclose:表示關閉主視窗時應用程式退出

好,讓我們來看看shutdown函式

//

//摘要:

//關閉乙個應用程式。

public

void

shutdown();

////

摘要:

//關閉將指定退出**返回給作業系統的應用程式。

////

引數:

//exitcode:

//應用程式的乙個整數退出**。 預設退出**為 0。

[securitycritical]

public

void shutdown(int exitcode);

有兩種過載,我們主要看第二種,奇怪為啥會有乙個所謂的退出**呢?還有它有什麼用呢?

這個問題,下篇隨筆再說。也希望知道的前輩指教一二,謝謝!~

iPhone應用程式生命週期

int argc,char argv,nsstring principalclassname,nsstring delegateclassname 來獲取應用程式的控制代碼。2 從給定的應用程式委託類,初始化乙個應用程式委託。並把該委託設定為應用程式的委託,這裡就有如果傳入引數為nil,會呼叫函式訪...

iPhone應用程式生命週期

2 從給定的應用程式委託類,初始化乙個應用程式委託。並把該委託設定為應用程式的委託,這裡就有如果傳入引數為nil,會呼叫函式訪問 info.plist檔案來尋找主nib檔案,獲取應用程式委託。3 啟動主事件迴圈,並開始接收事件。1 負責處理到來的使用者事件,並分發事件訊息到應該處理該訊息的目標物件 ...

ios 應用程式生命週期

一 ios應用程式狀態機一共有五種狀態 1.not running 應用還沒有啟動,或者應用正在執行但是途中被系統停止。2.inactive 當前應用正在前台執行,但是並不接收事件 當前或許正在執行其它 一般每當應用要從乙個狀態切換到另乙個不同的狀態時,中途過渡會短暫停留在此狀態。3.active ...