更改主题后Windows窗体应用程序退出

时间:2009-12-15 01:58:06

标签: c# .net winforms themes

我正在创建一个具有RichTextBox的应用程序,该应用程序根据信息所代表的内容具有不同颜色的文本(红色代表错误,黑色代表标准消息等)。我试图支持Windows主题,以及可能的系统颜色差异。为此,我创建了一种基于Window系统颜色更改默认文本颜色的方法,通过使每种颜色更亮或更暗,所以它形成鲜明对比。

然而,在测试这个系统时,我发现如果我在程序运行时更改主题,它会默默地退出,没有任何解释甚至异常。它只是退出。我在调用Application.Run之后尝试放置一个断点,并且Windows挂起在“请稍候......”屏幕上,资源管理器在修改主题时放置。过了一会儿,屏幕就消失了,而且,确定的是,断点已经被击中,这意味着它不会彻底杀死这个过程。

我的问题是,为什么会这样做,有没有办法阻止它这样做?

感谢。

2 个答案:

答案 0 :(得分:1)

更好的调试方法是向表单添加FormClosing事件处理程序并在其上设置断点。当它中断时,callstack会显示调用Close()方法的代码。

使用SystemEvents.UserPreferenceChanged事件的一种典型故障模式是在表单关闭时忘记取消注册事件处理程序。它是一个静态事件,它将阻止连接事件的表单被垃圾收集。当事件触发时,您很可能会遇到ObjectDisposedException。但这只是猜测。

答案 1 :(得分:0)

当我在很长一段时间做ASP.NET之后开始做winforms时,令我惊讶的是它只是一言不发地吃了异常。你必须在try catch块中包装Application.Run(new MDIParent1())。

另外,你有:

   Application.EnableVisualStyles();
   Application.SetCompatibleTextRenderingDefault(false);