- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设有以下情况。表单有一个按钮,单击该按钮可启动后台工作程序。在 RunWorkerCompleted 事件处理程序中,有一段代码会抛出未经处理的异常。表单从 Application.Run 方法启动。
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
throw new Exception();
}
private void button_Click(object sender, EventArgs e)
{
backgroundWorker.RunWorkerAsync();
}
}
问题是 Visual Studio 在 Application.Run 调用而不是在 FormMain.backgroundWorker_RunWorkerCompleted 方法中的“throw new Exception()”处中断。最重要的是,真正的异常被 TargetInvocationException 包裹,调用堆栈被缩减为 Program.Main 方法,因此无法检查导致异常的代码。
如何防止这种包装?我做错了什么吗?
从TargetInvocationException提供的调用栈来看,有很多调用方法堆叠起来,对于我对消息循环的基本理解和对线程的不那么基本的理解来说太多了。
编辑:我知道 TargetInvocationException 中有 InnerException 属性,可以通过查看那里来跟踪错误,但这不是问题所在。问题是如何在使用 TargetInvocationException 包装真正的异常之前让 Visal Studio 停止,这样我就可以使用 VS IDE 提供的所有那些不错的调试功能。
最佳答案
是的,这是使 RunWorkerCompleted 事件在 UI 线程上运行的魔术的不幸副作用。没有您编写的使其运行的代码,因此除程序中仍然涉及的最后一条语句(启动消息循环的 Application.Run() 调用)之外,调试器无法显示任何相关信息。
您必须通过在抛出异常时强制调试器停止来进行调试。 Debug + Exceptions,勾选 CLR 异常的 Thrown 复选框。还要注意在没有调试器的情况下运行它时的行为,您将看到 Wheel Of Fortune 对话框。使用 Application.SetUnhandledExceptionMode() 修复此问题。
关于.net - 来自 BackgroundWorker_RunWorkerCompleted 的 TargetInvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10785940/
更新 2:似乎这个库根本不支持 Compact-Framework,而且我不断收到其他异常 - 我将按原样离开这个问题,但我认为你不应该浪费时间回答它。 我 opened another questi
假设我有这个方法: MethodBuilder doubleMethod = typeBuilder.DefineMethod("Double",
我正在使用 Visual Studio 2008(C# Express Edition),我正在尝试调试由于我触发的事件而发生的 TargetInvocationException。 我的问题不是专门
我有一个名为carroms 的类(class)。当我创建它的对象时,没有错误。但是当我创建一个 carroms 数组时,抛出了这个异常: An unhandled exception of type
这个问题在这里已经有了答案: How to rethrow InnerException without losing stack trace in C#? (11 个答案) 关闭 8 年前。 我正
这个问题不太可能帮助任何 future 的访客;它只与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
由于 UI 线程(进度条)上的 Windows 控件,我在另一个线程中执行长时间处理时遇到了 TargetInvocationException。此异常导致我的应用程序崩溃(在调试中转到 main 方
我构建了一个显示图像的 WPF 控件。现在我想以非常快的速度更改该图像。我构建了一个 ImageContainer 类,它保存图像并有一个 ChangedEventHandler,它在更改时更新我控件
我收到这个未处理的异常错误: An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred
我想编写一个测试来检查我的抽象类构造函数是否正确处理了无效参数。我写了一个测试: [TestMethod] [ExpectedException(typeof(ArgumentException))]
我的调试器有问题,当在 UI 线程中执行错误代码时,调试器会正确指出错误行,这在线程内执行时也是如此,但在调度程序内调用时它的行为有点奇怪: TargetInvocationException 在反汇
我真的不知道发生了什么,为什么会一直发生 调用目标抛出异常。 代码在 frm5 中运行 然后错误显示在 程序.cs: using System; using System.Collections.Ge
我有许多使用 Delegate.DynamicInvoke 调用的方法。其中一些方法进行数据库调用,我希望能够捕获 SqlException 而不是捕获 TargetInvocationExcepti
我在使用反射实例化 DLL 文件中定义的类时遇到了一些问题。尽管代码看起来不错,但我在 Activator.CreateInstance 上得到了 TargetInvocationException。
解决方案后添加的注释:在反射调用的方法中抛出了 AccessViolationException。这就是无法捕获 TargetInvocationException 的原因。 注意:这是在 IDE 之
假设有以下情况。表单有一个按钮,单击该按钮可启动后台工作程序。在 RunWorkerCompleted 事件处理程序中,有一段代码会抛出未经处理的异常。表单从 Application.Run 方法启动
我正在为 Unity 游戏制作库存系统。 它按预期将库存序列化并保存到 xml 文件;但是,当我反序列化时,项目被设置为 null 并抛出 TargetInvocationException;最终是一
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我正在开发 WPF 应用程序,但我仅在运行时在单个设备上收到此错误。 Exception Info: System.Reflection.TargetInvocationException 我的问题:
此异常是什么意思,我该如何解决? 最佳答案 来自 MSDN: The exception that is thrown by methods invoked through reflection. T
我是一名优秀的程序员,十分优秀!