C# 处理整个类时出错
我继承了一个Winforms程序,它使用一些第三方软件,我看不到其源代码。在调用此代码中的方法时,希望它连接到软件检查的读取器。不幸的是,连接似乎不时中断,而隐藏的函数会导致程序无声地失败。有没有一种方法可以在不使用try-catch的情况下处理对此类方法的每次调用 该软件看起来像这样,使用Reader类,我们可以跨多个模块访问同一个Reader:C# 处理整个类时出错,c#,winforms,error-handling,try-catch,C#,Winforms,Error Handling,Try Catch,我继承了一个Winforms程序,它使用一些第三方软件,我看不到其源代码。在调用此代码中的方法时,希望它连接到软件检查的读取器。不幸的是,连接似乎不时中断,而隐藏的函数会导致程序无声地失败。有没有一种方法可以在不使用try-catch的情况下处理对此类方法的每次调用 该软件看起来像这样,使用Reader类,我们可以跨多个模块访问同一个Reader: public class Reader { private ThirdPartyReader thirdPartyReader; pu
public class Reader
{
private ThirdPartyReader thirdPartyReader;
public ObjectReport QueryObjects()
{
return thirdPartyReader.QueryObjects();
}
public Settings QuerySettings()
{
return thirdPartyReader.QuerySettings();
}
}
这其实并没有什么不同,因为您仍然需要执行reader.Try(),而不仅仅是调用方法,但这是一种非常简短的语法。当您说:“在此代码中调用方法时”,我假设您使用的是来自第三方的DLL,若是这样的话,你们可以使用IL反汇编程序来查看里面发生了什么——当然这并不能解决你们的整体问题。我不确定这是否与这个问题有关。基本上,到目前为止,我考虑的是要么尝试捕获对这个类的调用,要么使用内置的try-catch构建包装器。我希望有一种方法我没听说过。你想忽略例外情况吗?如果你吸收了每一个异常,你怎么知道出了什么问题?@SimonMcKenzie这是一个我们知道的硬件问题。我只需要在它崩溃之前记录并显示一条错误消息,如果有更简单的方法,我不想加入一堆try-catch。谢谢你的回答。这和我的包装非常相似。如果这是最好的解决方案,我会把它标记为答案。
public static class Extensions
{
public static TResult Try<TObject, TResult>(this TObject source, Func<TObject, TResult> method, string message = null)
{
try
{
return method(source);
}
catch (Exception e)
{
//Some Logging or whatever, optionally using the message parameter;
return default(TResult);
}
}
}
var reader = new ThirdPartyReader();
var objects = reader.Try(x => x.QueryObjects());
var settings = reader.Try(x => x.QuerySettings(), "Error Reading Settings");