Tag: exception处理

如何处理Task.Runexception

我从Task.Run中捕获exception时遇到了问题。我更改了代码并解决了问题。 我愿意弄清楚在这两种方式下处理Task.Run中的exception有什么区别: 在Outside函数中我无法捕获exception但在Inside中我可以捕获它。 void Outside() { try { Task.Run(() => { int z = 0; int x = 1 / z; }); } catch (Exception exception) { MessageBox.Show(“Outside : ” + exception.Message); } } void Inside() { Task.Run(() => { try { int z = 0; int x = 1 / z; } catch (Exception […]

强制中断程序中抛出的任何exception

在C#中进行编码时,我不喜欢处理exception,因为它可以更容易地找出出错的地方和原因。 但是,我不能给任何人一个不处理exception的程序。 我可以以某种方式强制Visual Studio打破每个exception,包括那些在try / catch块中抛出的exception吗?

如何在Windows Azure(工作器)角色中捕获未处理的exception

我正试图在我的工作角色中捕获所有未处理的exception。 我尝试将一个try – catch块放入Run()方法(如此处所示 ),但没有成功。 public override void Run() { try { base.Run(); } catch (Exception ex) { Trace.TraceError(“Unhandled Exception: {0}”, ex); throw ex; } } 该角色承载WCF服务,因此Run()方法中没有其他逻辑。 是否有另一种可能性来捕获此级别的exception? 更新1澄清问题:角色self托管WCF服务(在OnStart()初始化),其中某些操作是后台操作。 当调用该服务并且该方法抛出意外exception时,我想抓住它将其写入日志。 解决方案:显然它就像在普通的C#应用​​程序中一样:只需向UnhandledException事件添加一个处理程序,就像这样 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 在角色的OnStart()内部。 我是如此专注于Azure,我认为这毕竟不起作用,我甚至没有尝试过:-)

DataContext的例外情况

我一直在互联网上搜索,但我似乎无法找到它。 DataContext可以抛出哪些exception? 或者更具体地说,DataContext.SubmitChanges()方法抛出什么exception? 编辑 作为参考,这里列出了可能由L2S DataContext引发的已知exception: SQLEXCEPTION ChangeConflictException DuplicateKeyException ForeignKeyReferenceAlreadyHasValueException OutOfMemoryException(未正确处理DataContext时)

.NET和C#exception。 抓住什么是合理的

免责声明,我来自Java背景。 我没有做太多的C#。 这两个世界之间有很多转移,但当然存在差异,其中一个是exception倾向于被考虑的方式。 我最近回答了一个C#问题,建议在某些情况下,这样做是合理的: try { some work } catch (Exeption e) { commonExceptionHandler(); } (原因无关紧要)。 我收到的答复我不太明白: 直到.NET 4.0,捕获exception非常糟糕。 这意味着你可以捕获各种低级致命错误,从而掩盖错误。 这也意味着如果某种类型的损坏触发了这样的exception,堆栈上的任何打开的finally块都将被执行,所以即使callExceptionReporter函数尝试记录并退出,它甚至可能无法到达那一点( finally块可能会再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西)。 我可能比我意识到的更困惑,但我不同意其中的一些。 请其他人评论。 我知道我们不想接受许多低级exception。 我的commonExceptionHandler()函数可以合理地重新抛出那些。 这似乎与对相关问题的答案一致。 这说“根据你的上下文,使用catch(…)是可以接受的,只要重新抛出exception即可。” 所以我总结使用catch(Exception)并不总是邪恶,默默地吞下某些例外。 短语“直到.NET 4对Catch Exception来说非常糟糕”.NET 4中有哪些变化? 这是对AggregateException的引用,它可能会给我们一些与我们捕获的exception有关的新事物,但我不认为更改是基本的“不要吞下”规则。 下一句话真的很麻烦。 这可能是对的吗? 它还意味着如果某种类型的损坏触发了这样的exception,堆栈上的任何打开的finally块都将被执行(finally块可能再次抛出,或导致更多损坏,或从磁盘或数据库中删除重要的东西) 我的理解是,如果有一些低级代码 lowLevelMethod() { try { lowestLevelMethod(); } finally { some really important stuff } } 在我的代码中我调用lowLevel(); try { […]

访问冲突:尝试读取或写入受保护的内存

我有一个ac#(。net 4.0)winforms应用程序,每天每天工作8小时,在XP SP 3上运行。它在大多数情况下工作正常,有时持续数月。 然后它似乎陷入了一个糟糕的咒语,并且每天一次,连续几天,在不同的时间,出现访问冲突exception。 我已经尝试查看转储文件,并捕获访问冲突exception以查看堆栈; 无论哪种方式,我得到几乎相同的堆栈: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) at System.Windows.Forms.NativeWindow.DefWndProc(Message& m) at System.Windows.Forms.ToolTip.WndProc(Message& msg) at System.Windows.Forms.ToolTip.ToolTipNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& […]

LINQ查询执行投射,跳过或包装exception,其中源抛出IEnumerable.GetNext()

我想要一个通用的解决方案,但作为一个例子,假设我有一个IEnumerable ,其中一些可以解析为整数,有些则不能。 var strings = new string[] { “1”, “2”, “notint”, “3” }; 显然,如果我做了Select(s => int.Parse(s, temp))它会在枚举时抛出exception。 在这种情况下,我可以先.All(s => int.TryParse(s, out temp)) ,但我想要一个通用的解决方案,我不必枚举IEnumerable两次。 理想情况下,我希望能够执行以下操作,它调用我的魔术exception跳过方法: // eg parsing strings var strings = new string[] { “1”, “2”, “notint”, “3” }; var numbers = strings.Select(s => int.Parse(s)).SkipExceptions(); // eg encountering null object var objects = new object[] […]

如何使用Exception Manager Enterprise Library 6.0

使用Enterprise Library 6.0时,以下代码中会出现此错误: bool rethrow = ExceptionPolicy.HandleException(ex, “ReplacePolicy1”) “必须使用SetExceptionManager方法在ExceptionPolicy类中设置ExceptionManager。” 在Enterprise Library 5.0中,此代码有效: public static bool HandleException(Exception exception, string PolicyName) { ExceptionManager exManager = EnterpriseLibraryContainer.Current.GetInstance(); ExceptionPolicy.SetExceptionManager(exManager); bool rethrow = ExceptionPolicy.HandleException(ex, “ReplacePolicy1”); return reThrow; } 但是在Enterprise Library 6.0中找不到EnterpriseLibraryContainer类。 我想要获取ExceptionManager的实例。 我该如何解决这个问题?

不在NServiceBus中自动创建队列

我正在运行NServiceBus 3.0.0 rc2但是当我启动应用程序(作为本地管理员)而没有预先创建MSMQ时,它出错了: 队列不存在或您没有足够的权限来执行操作。 使用NServiceBus 2.6没有发生这种情况。 以下是我的配置: var bus = Configure.With() .Log4Net() .NinjectBuilder() .XmlSerializer() .DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t)) .DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t)) .DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t)) .MsmqTransport() .DefineEndpointName(“subscriber.input”) .IsTransactional(true) .PurgeOnStartup(false) .UnicastBus() .LoadMessageHandlers() .ImpersonateSender(false) .CreateBus() .Start(); 和 我可以看到一个配置扩展方法来禁用自动创建队列但没有启用它。 如果我预先创建队列,它工作正常。

创建我自己的exceptionc#

以下是我的C#书中的示例,我遇到了一个在Visual Studio中不起作用的书籍示例。 它涉及创建自己的exception,尤其是阻止你取负数的平方根。 但是当我使用“throw new”创建NegativeNumberException时,我收到一条错误,上面写着“找不到类型或命名空间名称’NegativeNumberException’(您是否缺少using指令或程序集引用?)” 如果这不是正确的方法,我怎么能创建自己的例外? 也许我的书已经过时了? 这是代码: class SquareRootTest { static void Main(string[] args) { bool continueLoop = true; do { try { Console.Write(“Enter a value to calculate the sqrt of: “); double inputValue = Convert.ToDouble(Console.ReadLine()); double result = SquareRoot(inputValue); Console.WriteLine(“The sqrt of {0} is {1:F6)\n”, inputValue, result); continueLoop = false; } catch (FormatException […]