博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
阅读量:6207 次
发布时间:2019-06-21

本文共 2814 字,大约阅读时间需要 9 分钟。

  在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客: 和  。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。Follow他的博客也有一段日子了,很希望能够分享给大家。

  本系列我不仅会翻译他的每一个tip,也会加入自己开发之中的看法和见解。本系列我希望自己也能和他一样坚持下来,每天的进步才能促成伟大。

  在这里郑重说明.该系列是基于Sean Sexton先生的英文博客, Sean Sexton拥有全部版权和撤销权利。

 

, <,<15-21>,

 

  [小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:。]


  #34 WPF程序退出事件处理

  当WPF程序点击关闭或者退出时,你可以在Application.Exit事件里添加处理退出逻辑

  

private void Application_Exit(object sender, ExitEventArgs e){ // Perform tasks at application exit}

  Exit事件会在应用退出和Windows退出时触发,顺序在Windows的SessionEnding事件后面。

  

  #35 Unhandled Exceptions

  WPF应用程序当遇到异常Exception时,如果代码中并没有对其进行处理就会抛出,导致了应用程序异常关闭。类似下图:

  

  异常抛出时,WPF应用会立刻关闭。用户会丢失所有的操作和得不到多余的信息。其实就是程序员最不愿意碰到的情况,自己写的程序崩掉了。

  处理方法是你可以在Application.DispatcherUnhandledException中处理所有抛出的异常。在这里我们可以将异常信息展示出来而且通过设置Handled属性来阻止程序崩溃。如下图:

  

private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e){    string friendlyMsg = string.Format("SO sorry that something went wrong.  The error was: [{0}]", e.Exception.Message);    string caption = "Error";    MessageBox.Show(friendlyMsg, caption, MessageBoxButton.OK, MessageBoxImage.Error);     // Signal that we handled things--prevents Application from exiting    e.Handled = true;}

  

  

  #36 Application-Scoped Properties

  

  Application类包含了一个Properties的属性,它是属性集合的字典 IDictionary,存储Key/Value。你可是存储在Application要用到的所有属性在这个字典里。

  在任何线程都可以读写Properties,它是线程安全的。

  

private void Application_Startup(object sender, StartupEventArgs e){    this.Properties.Add("Debug", false);    this.Properties.Add("Logger", null);     // Set properties based on command line parameters    foreach (string a in e.Args)    {        if (a.ToLower() == "/debug")            this.Properties["Debug"] = true;        else if (a.ToLower() == "/logging")            this.Properties["Logger"] = new MyAppLogger("Logfile.txt");    }}

  

  #37 Resource

  WPF和Silverlight,Resource是指可以在多处使用的.net对象或者值。Resource是WPF和Silverlight可以重用的资源。

  Resources存储在应用程序的资源字典的,存储的对象是Key/Value的形式。资源通常储存的对象有:styles, templates, brushes and colors, storyboards, transforms, or 3D matrices

  

  #38 定义和使用Resource

  你可以将Resource和MainApplication关联起来,这样你就可以在任何地方使用该资源。

  你可以在App.xaml里定义资源:

  

  在任意的UserControl或者Window都可以通过引用StaticResource来引用这个resource。

  

  

  #39 c# code使用resource

  Resource Dictionary存储的key/value形式的对象是DictionaryEntry类型的。你可以在Xaml中定义这个资源并且在C# code中来使用。

  具体实现如下:

  

  Key是greenBrush Value是一个SolidColorBrush, Color属性是Green。

  C# code中得到该resource:

  

SolidColorBrush br = (SolidColorBrush)Application.Current.Resources["greenBrush"];

 

  后篇会对WPF内部机制继续做探索,敬请关注!

  如果觉得有帮助,右下角赞一下吧~ (* *)

 

转载于:https://www.cnblogs.com/xfuture/p/3784221.html

你可能感兴趣的文章
Dialog with HTML skin using CDHtmlDialog and SetWindowRgn
查看>>
看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
查看>>
回车替换Tab 并不会 提交表单 IE Chrome 通过
查看>>
算法:基于 RingBuffer 的 Deque 实现
查看>>
SharePoint 2013技巧分享系列 - Active Directory同步显示用户照片
查看>>
Xcode :Missing file warnings
查看>>
Four Ways to Create a Thread
查看>>
Unity 物理引擎动力学关节
查看>>
黄聪:360浏览器、chrome开发扩展插件教程(1)开发Chrome Extenstion其实很简单
查看>>
新年是否应该跳槽去外包公司呢?
查看>>
【重温经典算法之二】快速排序
查看>>
浏览器是如何展示网页的
查看>>
架构:Hexagonal Architecture Guidelines for Rails(转载)
查看>>
同源策略
查看>>
各种C#数组的定义和初始化
查看>>
Fragment之间的通信
查看>>
插入排序实例
查看>>
MySQL Cluster搭建与测试
查看>>
html5
查看>>
在XAF应用程序使用现有的数据库?
查看>>