WPF让人哭笑不得的BUG
前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP、WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常。很明显,这不是后台的代码出的错。当时情况很艰苦,用户在十万八千里之外,他的电脑上也没有调试环境,我只能在本地一步一步排除错误可能,修改、打包、发布到用户、卸载、重装、足足折腾了一天,最后总算是搞定了。
不知道大牛们遇到这样的情况怎么处理。没有调试环境,本地运行良好,用户运行就闪退,没有任何错误抛出。大家先思考一番,你遇到这样的情况,你会如何处理。
我比较笨,第一步,把这个控件关联的后台代码注释,排除后台代码的出错可能。
第二步,既然不是后台代码的问题,那就是这个控件的问题了,这是个CheckBox,引用到一个写好的资源Style,由于不能到用户那里调试,本地也完好运行,那我就在窗体的Loaded里找这个资源,代码赋给这个控件。果然,本地报了一个“{DependencyProperty.UnsetValue}”不是属性“BorderBrush”的有效值的错误,心中窃喜,一看BorderBrush后面赋值的资源,在那个资源文件里找不到,放在了App.xaml里,那也行,那就把它弄过来,放到Style同文件里,本地运行,Ok,发布给用户,继续闪退。
第三步,现在十有八九是这个Style的问题了,是什么问题呢?每次我只要一点击这个CheckBox就闪退,那我就到Style里看看,点击时会有一个向右下平移的TranslateTransform执行了,难道是它?不管,删了再说,发布,继续闪退。再看,Checked为True和False的时候操作了一个Path,难道是这里有问题?继续删,继续闪退。
到这我就有点抓狂了,好吧,既然这个Style有问题,不用你可以吧,把引用Style的语句移掉,OK了。
虽然是正常运行了,但是问题的根本没有解决,由于使用默认的风格影响了用户的使用,必须使用自定义Style。那好吧,不用那个有问题的Style,用Win7的,直接复制副本到资源文件里,还是闪退。
我开始怀疑是不是系统有问题,用360修复了,问题依旧。
Google,百度,好像没有人有我这样的遭遇,我开始同情自己了。
蓦然回首,发现在不远处有台闲置的电脑,是部门的服务器,一般没人用,这让我看到了希望,远程到这台电脑,它是WindowsServer2003,上面也没有VS2010,但是毕竟是局域网,直接debug文件夹拷上去运行,一样闪退。
难道是混在资源文件里会出错?好吧,单独给你弄个资源文件,继续闪退。
没辙了,这个Style到底哪里出了问题,不能老这样闪退啊,好歹给我报个错,要哭了...已经没有什么我能做的了。
这时候我在想,是不是这个资源要用到App.xaml里的资源,运行时引用不到?好歹是个机会,于是把App里的资源全部移到Merged的资源里,发布用户,运行OK,原来正是如此!
总结:Wpf程序操作控件闪退,一般是由于资源引起的,如Style里的资源名找不到,写在分资源文件里需要引用到App.xaml里的资源等等,这时候要做的就是整合资源,App里面的资源全部整合到各自的资源文件里。如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SimpleStyles.xaml"/>
<ResourceDictionary Source="SpecalStyles.xaml"/>
<ResourceDictionary Source="WindowStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
建议:在程序架构刚刚搭建的时候就注意资源的分流,不要全挤在App.xaml里,App.xaml只作Merged,不是必须不在App.xaml里写任何资源,新手可以那样做,老手千万不要贻笑大方啊。
[转]
WPF让人哭笑不得的BUG的更多相关文章
- WPF让人哭笑不得的资源
前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...
- WPF让人哭笑不得的资源(二)
再吐槽一下(我已经无力吐槽).今天又被资源搞了一天,发现了一个秘密.大家想听就跟随我... 以前写的一个东东,想用mvvm重新实现一下,由于之前的写得很乱,App.xaml里一坨一坨的,就把资源整到一 ...
- WPF中Polyline拐角的bug
原文:WPF中Polyline拐角的bug Polyline绘制折线在小角度(比如几度)的时候会出现不连续的现象,形成拐角的两条线段中有一段会超出,角度越小越明显. 问题如下图 ...
- 【记录】让人淡疼的BUG之参数传送错误
前言 面试的时候往往容易被面试官问到:“说说你遇到过的比较重大或经典的Bug有哪些,能说一说吗?”我被问时脑海的反应是:“尼玛,这个我从来没有刻意记!一时半会咋想得起来,然后还是没想起来或者是随意给了 ...
- WPF RoutedEvent and HitTest - 简书
原文:WPF RoutedEvent and HitTest - 简书 学习的时候切忌心浮气躁,慢慢的过每一个知识点,不要漏掉任何细节.不然当遇到细节问题的时候,会恼,会闹,会悔不该当初--花一下午调 ...
- 那些让程序员目瞪口呆的Bug
程序员一生与bug奋战,可谓是杀敌无数,见怪不怪了!在某知识社交平台中,一个"有哪些让程序员目瞪口呆的bug"的话题引来了6700多万的阅读,可见程序员们对一个话题的敏感度有多高. ...
- WPF中使用DynamicResource实现换肤
这篇将介绍使用DynamicResource实现动态的界面切换功能.熟悉WPF的园友应该已经猜到了实现方式,简而言之就是动态替换DataTemplate,ControlTemplate,Style等等 ...
- WPF Step By Step 系列 - 开篇 ·
WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...
- WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
随机推荐
- 转 js事件探秘
Javascript中的事件,可以和html交互. 事件流IE&Opera:事件冒泡其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至 ...
- 软工网络15团队作业4——敏捷冲刺日志的集合贴(Alpha阶段)
Alpha阶段 第 1 篇 Scrum 冲刺博客 第 2 篇 Scrum 冲刺博客 第 3 篇 Scrum 冲刺博客 第 4 篇 Scrum 冲刺博客 第 5 篇 Scrum 冲刺博客 第 6 篇 S ...
- DBGrid添加行号编写笔记
procedure TForm1.ClientDataSet1NewRecord(DataSet: TDataSet); begin ShowMessage('你好'); ClientDataSet1 ...
- Delphi开发单机瘦数据库程序要点(后缀cds)
一.概述 Delphi作为Windows下的一种快速开发工具,不仅能开发一般的Windows应用程序,而且还具有强大的数据库应用程序开发功能.Delphi本身提供了对BDE,ODBC,ADO和Inte ...
- 利用userData实现客户端保存表单数据
对于多数网页制作的朋友,实现在客户端保存在网页表单上的信息,比较多的是采用Cookie技术来实现,这些功能例如:下拉列表框选择的选项,文本框输入的数据等.事实上,我们可以利用微软DHTML默认行为中的 ...
- AtCoder Grand Contest 029 翻车记
A:对于每个B,会和其右边的每个W交换一次. #include<iostream> #include<cstdio> #include<cmath> #includ ...
- cmake 常用变量和常用环境变量查表手册
cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...
- 【比赛】NOIP2017 时间复杂度
恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...
- BZOJ2007 [Noi2010]海拔 【平面图最小割转对偶图最短路】
题目链接 BZOJ2007 题解 这是裸题啊,,要是考试真的遇到就好了 明显是最小割,而且是有来回两个方向 那么原图所有向右的边转为对偶图向下的边 向左的边转为向上 向下转为向左 向上转为向右 然后跑 ...
- 【hdu4057】 恨7不成妻
http://acm.hdu.edu.cn/showproblem.php?pid=4507 (题目链接) 题意 求区间${[a,b]}$中的某些数的平方和,这些数要满足1.不是7的倍数,2.不含有7 ...