<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
wpf專案目錄中有一個App.xaml.cs檔案,該檔案中App是一個partical類,與之對應的另一partical部分在App.g.i.cs檔案中,該檔案是在編譯的時候WPF自動生成的。程式的入口Main
方法在該檔案中定義。
[System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "7.0.1.0")] public static void Main() { WpfApp.App app = new WpfApp.App(); app.InitializeComponent();//初始化Xaml app.Run();//程式執行 }
APP類繼承自Application,常見的生命週期事件有以下幾個:
Startup
:在呼叫 Application 物件的 Run 方法時發生Navigating
:在應用程式中的導航器請求新導航時發生(針對Browser型別的應用)LoadCompleted
:在已經載入、分析並開始呈現應用程式中的導航器導航到的內容時發生Navigated
:在已經找到應用程式中的導航器要導航到的內容時發生,儘管此時該內容可能尚未完成載入NavigationFailed
:在應用程式中的導航器在導航到所請求內容時出現錯誤的情況下發生NavigationProgress
:在由應用程式中的導航器管理的下載過程中定期發生,以提供導航進度資訊NavigationStopped
:在呼叫應用程式中的導航器的 StopLoading 方法時發生,或者當導航器在當前導航正在進行期間請求了一個新導航時發生SessionEnding
:在使用者通過登出或關閉作業系統而結束 Windows 對談時發生Activated
:當應用程式成為前臺應用程式時發生,App任意一個視窗啟用Deactivated
:當應用程式停止作為前臺應用程式時發生,App中所有視窗非啟用Exit
:在應用程式關閉之前發生(無法像SessionEnding事件進行取消)對於普通表單程式,從開始到結束會依次呼叫如下事件
-----App_Startup
-----App_Navigating
-----App_Activated
-----App_Exit
在APP執行後,會啟動表單,表單常用的宣告週期事件如下:
SourceInitialized
:作業系統給視窗分配控制程式碼的時候觸發,注意WPF表單裡面的控制元件是沒有控制程式碼的ContentRendered
:表單內容渲染後觸發Loaded
:表單佈局載入完成即準備好互動後觸發Activated
:表單啟用Deactivated
:表單失去焦點Closing
:呼叫關閉表單時觸發,此時可以取消操作Closed
:表單關閉後對於異常捕獲一般使用try-catch語句進行捕獲,但是對於全域性的異常可以在App中進行捕獲。
DispatcherUnhandledException
:在異常由應用程式引發但未進行處理時發生針對UI執行緒,無法捕獲多執行緒異常AppDomain.CurrentDomain.UnhandledException
:專門捕獲所有執行緒中的異常TaskScheduler.UnobservedTaskException
:專門捕獲Task異常案例:
APP中進行全域性異常捕獲
public partial class App : Application { public App() { //在異常由應用程式引發但未進行處理時發生。UI執行緒 //無法捕獲多執行緒異常 this.DispatcherUnhandledException += App_DispatcherUnhandledException; //專門捕獲所有執行緒中的異常 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; //專門捕獲Task異常 TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; } private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { Debug.WriteLine("-----App_DispatcherUnhandledException--UI執行緒" + e.Exception.Message); } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Debug.WriteLine("-----CurrentDomain_UnhandledException--其他執行緒" + (e.ExceptionObject as Exception).Message); } private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) { Debug.WriteLine("-----TaskScheduler_UnobservedTaskException--Task測試" + e.Exception.Message); e.SetObserved(); } }
表單中拋異常
public partial class MainWindow : Window { int i = 0; public MainWindow() { InitializeComponent(); //1、ui執行緒異常測試 _ = 1 / i; //2、其他執行緒異常測試 new Thread(new ThreadStart(() => { _ = 1 / i; })).Start(); //3、Task異常測試 Task.Run(() => { _ = 1 / i; }); } }
異常 | 結果 | 說明 |
---|---|---|
只開啟異常1 | -----App_DispatcherUnhandledException--UI執行緒-----CurrentDomain_UnhandledException--其他執行緒 | UI執行緒中的異常DispatcherUnhandledException和AppDomain.CurrentDomain.UnhandledException均能捕獲到 |
只開啟異常2 | -----CurrentDomain_UnhandledException--其他執行緒 | 只有AppDomain.CurrentDomain.UnhandledException可以捕獲 |
只開啟異常3 | -----TaskScheduler_UnobservedTaskException--Task測試 | 只有TaskScheduler.UnobservedTaskException可以捕獲到Task異常 |
備註:Task中的異常並不是立刻就能捕獲到的,而是等到垃圾回收的時候進行捕獲。如果想立刻進行捕獲則可以呼叫GC.Collect(0);
和GC.WaitForPendingFinalizers();
到此這篇關於詳解WPF中的APP生命週期以及全域性異常捕獲的文章就介紹到這了,更多相關WPF生命週期 全域性異常捕獲內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45