c# – 为什么我的Catch块只在Visual Studio中调试时运行?

c# – 为什么我的Catch块只在Visual Studio中调试时运行?,第1张

概述Program.cs中的代码 [STAThread]static void Main(){ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new Form1()); Program.cs中的代码
[STAThread]static voID Main(){    Application.EnableVisualStyles();    Application.SetCompatibleTextRenderingDefault(false);    try    {        Application.Run(new Form1());    }    catch (Exception ex)    {        MessageBox.Show("Blah...");    }}

在Form1中,我有一个按钮,代码抛出新的异常(“”);.

如果我从Visual Studio运行应用程序,我的消息框d出(消息“Blah …”).但是如果我从可执行文件运行应用程序,那么catch块根本就不执行.

为什么有区别?

我使用的是Visual Studio 2010,.NET 4.0,windows XP.

解决方法 这是因为windows Forms应用程序的标准异常处理在附加Visual Studio调试器时的行为不同 – 通常,Application.Run方法中内置的异常处理程序捕获未处理的异常,以便可以执行以下 *** 作:

如果允许将异常抛出到Application.Run方法之外,那么如果用户按“继续”(因为catch位于消息泵外),则会阻止应用程序继续.

当调试时,这被禁用,大概是这样,调试器将在未处理的异常而不是上面显示的对话框中直接跳转到调试模式.

如果您希望在windows Forms应用程序中处理未处理的异常,那么您应该处理Application.ThreadException Event.或者您可以使用Application.SetUnhandledExceptionMode Method更改此行为.

你绝对不会因此而迷惑:

> Is try/catch around whole C# program possible?
> Exception handling problem in release mode(这个问题是误导性的 – 这与发布/调试构建设置无关)
> C# Exceptions only caught when debugging?

总结

以上是内存溢出为你收集整理的c# – 为什么我的Catch块只在Visual Studio中调试时运行?全部内容,希望文章能够帮你解决c# – 为什么我的Catch块只在Visual Studio中调试时运行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1263273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存