草庐IT

EXCEPTION

全部标签

c# - 传递 ExceptionDispatchInfo 而不仅仅是 Exception 有什么意义?

我理解ExceptionDispatchInfo.Capture(e).Throw()的值(value)(保留原始堆栈跟踪),但是尽早使用Capture并通过ExceptionDispatchInfo周围与只是传递捕获的Exception周围?作为一个具体的例子,比较staticExceptionCaptureException(Actionaction){try{action();returnnull;}catch(Exceptione){returne;}}publicvoidTest1(){ExceptionDispatchInfo.Capture(CaptureExceptio

c# - AppDomain.FirstChanceException 和堆栈溢出异常

我正在使用FirstChanceException事件记录有关任何引发的异常的详细信息。staticvoidMain(string[]args){AppDomain.CurrentDomain.FirstChanceException+=(sender,eventArgs)=>{Console.WriteLine("Insidefirstchanceexception.");};thrownewException("Exceptionthrowninmain.");}这按预期工作。但是,如果在事件处理程序中抛出异常,则会发生堆栈溢出,因为事件将递归引发。staticvoidMain(s

c# - 如何使用 TaskCompletionSource.SetException 保留等待行为?

(这是对这个问题的新尝试,现在更好地证明了这个问题。)假设我们有一个错误任务(varfaultedTask=Task.Run(()=>{thrownewException("test");});),我们等待它。await将解压AggregateException并抛出底层异常。它将抛出faultedTask.Exception.InnerExceptions.First()。根据ThrowForNonSuccess的源代码,它将通过执行任何存储的ExceptionDispatchInfo来执行此操作,大概是为了保留良好的堆栈跟踪。如果没有ExceptionDispatchInfo,它不

c# - 如何在堆栈跟踪中获取参数值

我可以通过StackTrace使用如下方式获取有关参数的信息:catch(Exceptionex){varst=newStackTrace(ex);System.Reflection.ParameterInfopi=st.GetFrame(0).GetMethod().GetParameters().First();}我想知道如何获取参数的值。示例:如果我在堆栈跟踪中的方法是这样的:voidMyMethod(objectvalue)电话是这样的:MyMethod(10);我想得到值10。我该怎么做? 最佳答案 有两种方法。更强大的是

c# - 尝试反序列化从 Exception 继承的类时 Json.net 失败

我有一个继承自Exception的类SearchError,每当我尝试从有效的json中反序列化它时,我都会得到以下异常:ISerializabletype'SearchError'doesnothaveavalidconstructor.TocorrectlyimplementISerializableaconstructorthattakesSerializationInfoandStreamingContextparametersshouldbepresent.Path'',line1,position81.我尝试实现建议的缺失构造函数,但没有帮助。这是实现建议的构造函数后的类:

c# - NUnit:为什么 Assert.Throws<T> 没有捕获我的 ArgumentNullException?

我应尊敬的JohnSkeet先生的要求重新发布这个问题,他建议我设计一个简单的测试程序来隔离和演示我遇到的问题并重新发布这个问题。这个问题源于thisone,所以如果这一切听起来很熟悉,请原谅我。您可能会从那个问题中收集到关于这个问题的额外详细信息。我遇到的问题是Assert.Throws来自NUnit2.5.9。有时,它无法捕获在TestDelegate调用的方法中抛出的任何异常。我在下面的代码中以可重现的方式确定了这种行为。(尽管这可能是FailsOnMyMachine™的一个例子。为了重现错误,我创建了一个包含两个C#DLL项目的解决方案:第一个包含一个类,具有一个公共(publ

c# - 如何指定接口(interface)的实现者抛出的异常?

我目前正在开发一个解决方案,并以一种能够强有力地实现策略/提供者模式的方式对其进行设计。因此,该解决方案公开了许多接口(interface)并包含这些接口(interface)的默认实现,这些接口(interface)可以通过DI类型方法进行替换。如果主机应用程序使用许多这样的接口(interface),它期望处理可能发生的某些异常,例如IDataRetriever接口(interface)有一个方法SomeDataTypeGetData(inttimeout);并且主机可以处理一些自定义异常,例如DataRetrievalTimeoutException或NetworkConnect

c# - 如果您重新抛出它们并包裹了另一个异常,是否可以捕获所有异常类型?

我知道您不应该像这样编写缓存所有异常类型的代码。try{//codethatcanthrowanexception}catch{//what?Idon'tseeno}相反,您应该做一些更像下面的代码的事情,以允许您不希望出现的任何其他异常。try{//codethatcanthrowanexception}catch(TypeAException){//TypeAspecificcode}catch(TypeBException){//TypeBspecificcode}但是,如果您用另一个异常包装它们,是否可以捕获所有异常类型?考虑下面的这个Save()方法,我将其作为Catalog

c# - 如何修复 "The requested resource is in use. (Exception from HRESULT: 0x800700AA)"

我该如何解决这个错误?"Therequestedresourceisinuse.(ExceptionfromHRESULT:0x800700AA)".这在使用C#.NET中的WebBrowser控件导航到其他网站时出现。为什么? 最佳答案 如果当前正在处理导航操作,或者控件中的任何阻止对话框当前处于打开状态(包括上下文菜单、Javascript警报、NTLM登录对话框等),则WebBrowser控件被视为“正在使用”。您可以使用WebBrowser.IsBusy属性来检测这些状态。如果由于当前导航操作不完整,您可以尝试停止当前导航(

c# - 在 try-catch 子句上显示异常

到目前为止,每当我想显示我使用的代码抛出的异常时:try{//Codethatmaythrowdifferentexceptions}catch(Exceptionex){MessageBox.Show(ex.ToString());}我使用上面的代码主要是出于调试原因,以便查看异常的确切类型以及抛出异常的相应原因。在我现在创建的一个项目中,我使用了几个try-catch子句,我想在出现异常时显示弹出消息,以使其更加“用户友好”。我所说的“用户友好”是指一条消息会隐藏当前与上述代码一起显示的NullReferenceException或ArgumentOutOfRangeExcepti