现在位置首页 / 项目实战 /正文

wpf问题--DispatcherUnhandledException异常处理执行2次:愚蠢的Copy代码!

作者: IT小兵 | 2014年7月26日| 热度:℃ | 评论: |参与:

今天在测试wpf项目时,发现一个恶心的问题:程序全局异常处理中,异常会捕获2次。妥妥的,就是2次!

首先看代码:

   private void Application_Startup(object sender, StartupEventArgs e)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.Current.DispatcherUnhandledException += Application_DispatcherUnhandledException;
        }
        private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            CMessageBox.Show("我们很抱歉,当前应用程序遇到一些问题.."+e.Exception,
                "意外的操作", CMessageBoxButton.OK, CMessageBoxImage.Warning);//这里通常需要给用户一些较为友好的提示,并且后续可能的操作
            e.Handled = true;//使用这一行代码告诉运行时,该异常被处理了,不再作为UnhandledException抛出了。
        }
        void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            //Exception ex = e.ExceptionObject as Exception;
            //CMessageBox.Show("我们很抱歉,当前应用程序遇到一些问题.请联系管理员." + e.ExceptionObject, "意外的操作", CMessageBoxButton.OK, CMessageBoxImage.Warning);
            //ex.hand = true;//使用这一行代码告诉运行时,该异常被处理了,不再作为UnhandledException抛出了。
        }
        private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
        {
        }

CurrentDomain_UnhandledException的代码我注释掉了,我是因为怀疑这个2个HandledException会有冲突。

但是首先是没有作用,再看资料后发现这2个本身就不一回事。

最后,我考虑事件肯定是要注册的。我在代码中注册了一次,会不会在别的地方还有注册?接着我想到是在Xaml中!

<Application x:Class="Kaitone.DetectiveHelper.UI.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  Startup="Application_Startup"
             StartupUri="Login.xaml" DispatcherUnhandledException="Application_DispatcherUnhandledException" 
             SessionEnding="Application_SessionEnding">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>        
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

艹。果然是这样的。将

 DispatcherUnhandledException="Application_DispatcherUnhandledException" 

             SessionEnding="Application_SessionEnding"

去掉就可以了。


教训:由于在wpf中是半路出家,很多东西都是找资料。找到资料后,就测试是否可行,没有足够的经验判断资料之间的冲突和相同点。

导致了今天的这个bug。教训啊。Copy虽易,切行切修复吧。

点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询