为什么是UnhandledExceptionEventArgs.ExceptionObject一个对象而不是一个Exception?
我依附于AppDomain.UnhandledException.
我想UnhandledExceptionEventArgs.ExceptionObject加入Exception并插入它.
考虑到这一点,它会永远是空的吗?
在MSDN文档不exatly有用.
获取未处理的异常对象.
在将ASP.NET应用程序迁移到async/await模型时,我偶然发现了一个相当危险的情况.
情况是我创建了一个异步方法:async Task DoWhateverAsync(),将接口中的声明更改为,Task DoWhateverAsync()并希望编译器通过该警告告诉我代码现在在哪里是错误的.好吧,运气不好.只要通过接口注入该对象,就不会发出警告.:-(
这很危险.有没有办法自动检查返回任务的非等待方法?我不介意一些警告太多,但我不想错过一个.
这是一个例子:
using System.Threading.Tasks;
namespace AsyncAwaitGames
{
// In my real case, that method just returns Task.
public interface ICallee { Task<int> DoSomethingAsync(); }
public class Callee: ICallee
{
public async Task<int> DoSomethingAsync() => await Task.FromResult(0);
}
public class Caller
{
public void DoCall()
{
ICallee xxx = new Callee();
// In my real case, the method just returns Task,
// so there is no type mismatch when assigning …Run Code Online (Sandbox Code Playgroud) 您想在哪里捕获异常以及为什么?
我很有兴趣看到人们发现将try/catch块放在哪里是有用的,希望可能出现一些通用模式.我将用C++发布我的两个示例答案,但任何语言都可以.
请回答一个位置和原因.谢谢.
architecture error-handling design-patterns exception error-reporting
我想在我的C#应用程序遇到UE时获得Default Windows Forms Unhandled-Exception Dialog.在vs 2005中我在app.conf中关闭jit Debugging,如下所示:
<configuration>
<system.windows.forms jitDebugging="false" />
<configuration>
Run Code Online (Sandbox Code Playgroud)
应用程序行为正常并显示Windows窗体UE默认对话框,包括继续,退出,调用堆栈和所有.
然而在vs 2008中,在同一台机器上或不同的机器上,即使我使用jit jit,我仍然可以通过Debug,Send Report和Do not Send按钮获得Default .NET Unhandled-Exception Dialog.
如何使我的vs 2008应用程序像我在vs 2005中制作的那样,显示Windows Forms UE对话框?
请不要使用
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Run Code Online (Sandbox Code Playgroud)
仅仅因为我在我的vs 2005项目中没有使用自定义处理程序,为什么我会在vs 2008中使用?我想让这份工作做CLR.
任何帮助表示赞赏
我有一个.NET 2005(C#)桌面应用程序,其中有一个登录表单和一个MDI表单,然后有多个子表单.所有其他表单仅以MDI格式打开.
用户登录后,我隐藏登录表单然后显示MDI表单,但是当我关闭MDI表单时,我的应用程序进程没有结束,因为登录表单仍然是隐藏的.我想要的是,当用户关闭MDI表单时,整个应用程序应该关闭(实质上,该进程不应该显示在任务管理器中),因为如果每次用户关闭并重新打开应用程序并登录时,它都会创建一些性能问题.
我正在做类似下面的事情:
//my login validation script,
//after successful login
this.Hide();
if (globalData.ObjMdiMain.IsDisposed)
{
globalData.ObjMdiMain = new mdiMain();
}
globalData.ObjMdiMain.Show();
Run Code Online (Sandbox Code Playgroud)
globalData是我的静态类,我在其中创建整个应用程序所需的全局对象.在那里,我已经定义了ObjMdiMain我的MDI表单的对象,我在登录表单中访问它.
那么,是否有任何方法或功能将从系统结束整个过程,如"Application.End();" 或者是其他东西?
谢谢!
我有以下简单的场景:
带有Button的DialogForm,Button_click会抛出异常.
带有按钮和标签的MainForm,在单击中我在Catch块内显示DialogForm的新实例.
如果我在常规WinForms中运行此设置,我可以按预期捕获异常.
如果我在WinMobile中运行它(我在WM5和WM6 Pro上测试过),我可以看到调试器输入了Catch块但是Exception继续传播并且App死了.
MainForm中的代码如下所示:
try
{
using (DialogForm frm = new DialogForm())
{
DialogResult r = frm.ShowDialog();
label1.Text = r.ToString();
}
}
catch (Exception ex)
{
label1.Text = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)
我进一步调查了一下,在这段代码和Application.Run()周围有一个catch {}块,应用程序仍然退出.
显然它不是一个失控的异常,被抓住并处理得很好.但在此操作之后,它看起来像应用程序执行不需要的Exit().