Tag: exception处理

删除过多的try-catch块

我正在重构由其他开发人员编写的中型WinForms应用程序,并且几乎每个类的每个方法都被try-catch块包围。 99%的时间这些catch只阻止记录exception或清理资源并返回错误状态。 我认为很明显,这个应用程序缺乏适当的exception处理机制,我打算删除大多数try-catch块。 这样做有什么不利之处吗? 你会怎么做? 我打算: 要适当地记录exception并阻止它们传播给用户,请使用Application.ThreadException处理程序 对于需要清理资源的情况,请保留try-catch块 更新 :使用using或try-finally块是一种更好的方法。 谢谢你的回复。 在“return-false-on-error”的方法中,让exception传播并在调用者中捕获它 欢迎任何更正/建议。 编辑:在第3项中,“return-false-on-error”我的意思是这样的方法: bool MethodThatDoesSomething() { try { DoSomething(); // might throw IOException } catch(Exception e) { return false; } } 我想把它重写为: void MethodThatDoesSomething() { DoSomething(); // might throw IOException } // try-catch in the caller instead of checking MethodThatDoesSomething’s return value try { […]

等待多个任务的时间是否比第一个例外更多?

今天我的同事和我讨论了如何正确处理C#5.0 async方法中的exception,我们想知道是否同时等待多个任务也会观察到运行时未解包的exception。 请考虑以下代码段: async Task ExceptionMethodAsync() { await Task.Yield(); throw new Exception(); } async Task CallingMethod() { try { var a = ExceptionMethodAsync(); var b = ExceptionMethodAsync(); await Task.WhenAll(a, b); } catch(Exception ex) { // Catches the “first” exception thrown (whatever “first” means) } } 现在第二项任务会发生什么? 两者都处于故障状态,但是现在观察到还是未观察到的第二个任务exception?

CodedUI测试 – 为整个测试集启动一次浏览器

我正在VS2010中编写一些encodeUI测试来测试Web应用程序。 我希望能够在解决方案中为浏览器中的整个测试打开一次浏览器,然后在测试完成后再次关闭它。 我已经在一个方法上尝试了AssemblyInitialize属性,我的BrowserWindow.Launch在那里,但是当我运行它时它给了我以下exception: 程序集初始化方法OrdersGridTesting.SuiteSetup.Login引发exception。 Microsoft.VisualStudio.TestTools.UITest.Extension.TechnologyNotSupportedException:Microsoft.VisualStudio.TestTools.UITest.Extension.TechnologyNotSupportedException:当前不支持浏览器。中止测试执行。 当我把它放入TestMethod ,同样的代码工作正常,这让我相信这是不可能的。 有人可以提出另一种方法吗? 如果可能的话,我想要一个不涉及向项目中的每个测试类添加相同代码的方法。 谢谢!

Ninject WithConstructorArgument:没有匹配的绑定可用,并且该类型不可自绑定

我对WithConstructorArgument的理解可能是错误的,因为以下内容不起作用: 我有一个服务,让我们称之为MyService,其构造函数采用多个对象,以及一个名为testEmail的字符串参数。 对于此字符串参数,我添加了以下Ninject绑定: string testEmail = “test@example.com”; kernel.Bind().To().WithConstructorArgument(“testEmail”, testEmail); 但是,在执行以下代码行时,我得到一个exception: var myService = kernel.Get(); 这是我得到的例外: 激活字符串时出错没有匹配的绑定可用,并且该类型不可自我绑定。 激活路径: 2)将依赖字符串注入到MyService类型的构造函数的参数testEmail中 1)请求MyService 建议: 1)确保已为字符串定义了绑定。 2)如果在模块中定义了绑定,请确保已将模块加载到内核中。 3)确保您没有意外创建多个内核。 4)如果使用构造函数参数,请确保参数名称与构造函数参数名称匹配。 5)如果使用自动模块加载,请确保搜索路径和filter正确无误。 我在这做错了什么? 更新 : 这是MyService构造函数: [Ninject.Inject] public MyService(IMyRepository myRepository, IMyEventService myEventService, IUnitOfWork unitOfWork, ILoggingService log, IEmailService emailService, IConfigurationManager config, HttpContextBase httpContext, string testEmail) { this.myRepository = myRepository; this.myEventService = myEventService; this.unitOfWork […]

如何捕获/观察从Task抛出的未处理exception

我正在尝试在我的应用程序中记录/报告所有未处理的exception(错误报告解决方案)。 我遇到过一个总是未处理的情景。 我想知道如何以未处理的方式捕获此错误。 请注意,我今天早上做了很多研究并尝试了很多东西..是的,我已经看过这个 , 这个以及更多。 我只是在寻找一种通用的解决方案来记录未处理的exception。 我在控制台测试应用程序主要方法中有以下代码: Task.Factory.StartNew(TryExecute); 要么 Task.Run((Action)TryExecute); 以及以下方法: private static void TryExecute() { throw new Exception(“I’m never caught”); } 我已经尝试在我的应用程序中连接到以下内容,但它们从未被调用过。 AppDomain.CurrentDomain.UnhandledException TaskScheduler.UnobservedTaskException 在我最初发现此错误的Wpf应用程序中,我也连接到这些事件,但它从未被调用过。 Dispatcher.UnhandledException Application.Current.DispatcherUnhandledException System.Windows.Forms.Application.ThreadException 唯一被称为的处理程序是: AppDomain.CurrentDomain.FirstChanceException 但这不是一个有效的解决方案,因为我只想报告未捕获的exception(并非每个exception,因为在执行/解析任何catch块之前调用FirstChanceException。

使用查询字符串解析AppSettings值时出错

在我的web.config中的AppSettings中,我有这样的事情: 但是,似乎当AppSettings值中包含&符号( & )时,ASP.NET会引发以下错误: 解析EntityName时发生错误 为什么会发生这种情况,如何在App.config中包含这样的URL?

c#exception处理,实例。 你会怎么做?

我正试图在处理exception方面做得更好,但是当我尽力抓住它们时,我觉得我的代码变得非常丑陋,难以理解和混乱。 我很想看看其他人如何通过提供实际例子和比较解决方案来解决这个问题。 我的示例方法从URL下载数据并尝试将其序列化为给定类型,然后返回填充了数据的实例。 首先,没有任何exception处理: private static T LoadAndSerialize(string url) { var uri = new Uri(url); var request = WebRequest.Create(uri); var response = request.GetResponse(); var stream = response.GetResponseStream(); var result = Activator.CreateInstance(); var serializer = new DataContractJsonSerializer(result.GetType()); return (T)serializer.ReadObject(stream); } 我觉得这个方法很可读。 我知道这个方法中有一些不必要的步骤(比如WebRequest.Create()可以接受一个字符串,我可以链接方法而不给它们变量)但是我会这样做,以便更好地与具有exception的版本进行比较 – 处理。 这是处理可能出错的一切的第一次尝试: private static T LoadAndSerialize(string url) { Uri uri; WebRequest request; WebResponse […]

处理ViewModel / Model中的致命exception

我有一个使用MV-VM方法编写的应用程序。 数据访问在模型中完成。 如果此处发生致命错误(例如,与数据源的连接丢失),则抛出exception。 此exception冒泡到ViewModel。 但是,由于数据访问的原始触发器是数据绑定,因此WPF会吞下此exception(当应用程序在调试器下运行时,它仅记录在输出窗口中)。 我宁愿这个exception仍然未处理,所以我的应用程序范围的未处理exception处理程序可以拾取它,记录它并优雅地退出。 我怎样才能做到这一点?

如何:处理exception,最佳实践

需要实现全局error handling,所以也许您可以帮助以下示例… 我有这个代码: public bool IsUserAuthorizedToSignIn(string userEMailAddress, string userPassword) { // get MD5 hash for use in the LINQ query string passwordSaltedHash = this.PasswordSaltedHash(userEMailAddress, userPassword); // check for email / password / validity using (UserManagementDataContext context = new UserManagementDataContext()) { var users = from u in context.Users where u.UserEMailAdresses.Any(e => e.EMailAddress == userEMailAddress) && u.UserPasswords.Any(p […]

分层体系结构中的exception处理

我们正在重构(并且当然是重新设计)我们的分层设计服务。 我们有服务操作层(BLL),网络抽象层 – >(处理网络代理),数据抽象层。 但我们对我们的exception处理策略感到有些困惑。 我们不希望从BLL向外界透露太多信息。 (从其他层到bll都很好) 我们不想用try catch堆栈来混淆代码 我们不希望在catch块中混淆exception处理代码(如日志记录,电子邮件等) 有人可以发布一些代码示例或文献指针,我们可以用它来设计我们简单的exception处理框架吗?