Tag: exception处理

在MDIParent 中使跨线程操作无效

可能重复: 跨线程操作无效 我试图从另一个线程关闭表单的基础。 我收到以下错误。 System.InvalidOperationException:跨线程操作无效:从创建它的线程以外的线程访问控制’MDIParent’。 对于以下行: MDIParent.MDIParentRef.BaseClose();

在FrameWork级别捕获WPF中的exception

我正在开发一个轻量级的WPF MVVM框架,并且希望能够捕获未处理的exception,并且理想地从它们中恢复。 暂时忽略所有不这样做的好论据,我遇到以下情况: 如果我在App.xaml.cs的OnStartup方法中注册AppDomain.CurrentDomain.UnhandledException的处理程序,如下所示… App.xaml.cs: protected override void OnStartup(StartupEventArgs e) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(this.AppDomainUnhandledExceptionHandler); base.OnStartup(e); } void AppDomainUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs ea) { Exception e = (Exception)ea.ExceptionObject; // log exception } 然后在我的一个VM中引发exception,处理程序按预期调用。 到目前为止这么好,除了我无法使用这种方法恢复的事实,我所能做的就是记录exception,然后让CLR终止应用程序。 我真正想要做的是恢复,并将控制权返回给主框架VM。 (再次抛开反对这样做的动机)。 所以,做一些阅读,我决定在同一个地方为AppDomain.CurrentDomain.UnhandledException注册一个事件处理程序,这样代码现在看起来像这样…… protected override void OnStartup(StartupEventArgs e) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(this.AppDomainUnhandledExceptionHandler); this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(DispatcherUnhandledExceptionHandler); base.OnStartup(e); } void AppDomainUnhandledExceptionHandler(object sender, […]

Windows服务中未处理的exception

我创建了一个运行多个任务的.net c#windows服务。 我在其中包含exception处理但我想设置一个全局处理程序来捕获Windows服务中未处理的exception,我该怎么做?

TPL打破未处理的exception

我在我的应用程序中使用async await以及Task.Factory.StartNew ,但我注意到的一件事是,当未处理的exception发生时,visual studio不再破坏 这是我before using await意思 但在我将一个方法转换为一个Task并使用await之后 它仅在视觉工作室的输出区域中捕获… 顺便说一下:对我来说很奇怪,因为我是.Net4.5的新手,请原谅我,如果没有说明我需要的具体内容,那么我想知道的是 当使用异步等待时,我怎样才能使视觉工作室中断exception

.net处理exception的属性 – 在属性访问器上使用

我从asp.net mvc经验中知道你可以拥有处理exception的属性(HandleErrorAttribute)。 据我所知,Controller类有一些OnException事件,这可能是这种行为的组成部分。 但是,我想在我自己的代码中做类似的事情: 梦想的例子: public String MyProperty { [ExceptionBehaviour(typeof(FormatException), MyExEnum.ClearValue)] set { _thing.prop = Convert.ToThing(value); } } …. 上面的代码显然没什么意义,但接近我想做的事情。 我希望属性集访问器上的属性捕获某种类型的exception,然后以某种自定义方式处理它(或者甚至只是吞下它)。 任何想法的家伙?

XDocument.Save()时的内存exception

我试图将XDcoument保存到没有足够可用内存空间的拇指驱动器。 (这是应用程序的一个特殊测试条件)虽然应用程序给出了如下的exception,但我无法在XDocument.Save(filePath)周围的try catch块中获得该exception。 看起来这是一个延迟投掷。 这是LINQ问题还是我做错了什么? alt text http://img211.imageshack.us/img211/8324/exce.png System.IO.IOException was unhandled Message=”There is not enough space on the disk.\r\n” Source=”mscorlib” StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer) at System.IO.FileStream.Dispose(Boolean disposing) at System.IO.FileStream.Finalize()

在C#(或一般的.NET)中,您是否可以屏蔽通过属性抛出exception的调用堆栈级别?

标题可能有点令人困惑所以我会解释。 说你有这个电话链…… public DoWork(index) >> private DoWorkHelper(index) >> private CheckIndex(index) 现在,如果您调用DoWork ,它会将调用遍历到CheckIndex ,将每个更深的调用添加到调用堆栈。 现在,如果某人使用错误的index值调用DoWork ,它会在CheckIndex一直抛出exception,而且当前,这就是调试器中断的地方。 然后你必须走回调用堆栈才能看到真正的犯罪者是有人将坏数据传递给DoWork 。 现在回到VB6时代,你可以简单地用一个属性装饰DoWorkHelper和CheckIndex来说’如果我内部抛出任何exception,请不要突出显示我,而是突出我的调用者,因为他们是那些通过我糟糕废话的人!’ 因此,在这种情况下,代码将在DoWork突破, DoWorkHeper突出显示对DoWorkHeper的调用。 还有一个设置可以禁用它,所以为了更深层次的调试目的,它仍然可以抛出CheckIndex ,它实际发生的级别,但有一半的时间,那里的故障告诉你什么都没有,因为你不知道你是怎么到达那里的走回调用堆栈。 可以认为这是一种装饰代码的方法,可以说明当你遇到exception时,自动遍历调用堆栈到坏值实际告诉你有用的地方。 请注意,这类似于“Break On All Exceptions”,除非您通过装饰处理此问题。 另外,您没有设置中断特定类型的exception(例如所有空引用exception等),而是特定方法! (或者更准确地说,是一种称为装饰方法的那种。) 那么C#或.NET一般都有这个吗? 更新 虽然我向Dark Falcon提供了答案,因为他指导我在那里,我已经添加了一个更详细的解释,说明所有属性的含义,以及在什么情况下。 请在下面查看。

获取try..catch中的Exception对象以包含FULL stacktrace,当前它被截断

有人可以帮忙吗? 我试图在try..catch的捕获中获得完整的堆栈跟踪。 目前它被截断为仅包含错误所在的当前方法…. 让我解释..目前我的堆栈跟踪包括方法“第三”,其中错误发生但第一和第二不包括在内,我相信这是设计的。 private void First() { this.Second(); } private void Second() { this.Third(); } private void Third() { try { throw new SystemException(“ERROR HERE!”); } catch (Exception ex) { // I WILL LOG THE EXCEPTION object “EX” here ! but ex.StackTrace is truncated! } } 我已经看到了在STRING中获得完整堆栈跟踪的一些技巧,但问题是我的日志框架需要一个类型为“Exception”的对象,但是我的exception的变量(ex)是有效的但是属性StackTrace被截断了。 无论如何我有一个完整的堆栈跟踪可以收到一个完整的exception,所以我仍然可以发送我的“EX”,但这次它将有一个UNtruncated堆栈跟踪。 UnhandledErrror事件似乎工作就好像我到达这里Exception有一个堆栈跟踪并完全填充… 我真的很感激任何反馈..

如何在C#中的exception中获取错误号而不是错误消息?

有没有办法可以获得Exceptions的相应错误代码? 我需要抛出exception错误代码而不是它的消息,以便我根据错误代码向用户显示正确的消息。

AppDomain.UnhandledException处理程序不会在unit testing中触发

在下面的代码片段中,为什么在unit testing中抛出exception时,附加的处理程序( AppDomain.CurrentDomain.UnhandledException事件)是否会启动? 我在VS2010上使用NUnit 2.5.10和TestDriven.NET 3.0。 [TestFixture] public class MyTests { private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(“Gotcha!”); } [Test] public void ExceptionTest1() { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; throw new Exception(“ExceptionInTest”); } } 输出:(没有问题) —— Test started: Assembly: WcfQueue.Test.dll —— Test ‘xxxxx.Test.MyTests.ExceptionTest1’ failed: System.Exception : ExceptionInTest ProgramTests.cs(83,0): at xxxxx.Test.MyTests.ExceptionTest1() 0 passed, 1 failed, 0 skipped, […]