我有脚本编写脚本。在那个dll中,我有一个名为Scripter的类。在Scripter类中,我调用了一些从MySQL数据库(LoadTables())加载数据的方法。在那些从MySQL数据库异常加载数据的函数可能会发生。我希望以后能够在我的应用程序中使用Scripting.dll来执行以下操作:
Scrpter sc = new Scripter();
sc.OnError += ErrorOccured;
并希望在我的应用程序中使用ErrorOcured功能,如:
private void ErrorOccured(Exception exception)
{...}
我需要在Scripter类中拥有什么,以及如何在LoadTables中的catch块中传递异常,以便稍后我可以使用ErrorOcured()来查看发生了什么错误?
答案 0 :(得分:1)
正如Picoh和Zoltan对您的问题发表评论,您可以轻松地将方法调用包装到Scripter
块中的try/catch
方法。但是,如果你想使用事件(使用自定义args),你可以这样做:
//your class
public class Scripter
{
public Scripter()
{
}
//public event with custom event args
public EventHandler<ScripterErrorEventArgs> OnError;
//just for test
public void RaiseError()
{
//error which is caught here
Exception ex = new Exception("something happened");
OnError?.Invoke(this, new ScripterErrorEventArgs(ex));
}
}
//class for custom event args. add your own other properties as needed
public class ScripterErrorEventArgs : EventArgs
{
public ScripterErrorEventArgs()
{
}
public ScripterErrorEventArgs(Exception ex)
{
this.Exception = ex;
}
public Exception Exception { get; set; }
}
//usage
public void someMethod()
{
Scripter s = new Scripter();
s.OnError += new EventHandler<ScripterErrorEventArgs>(LogError)
s.RaiseError();
}
private void LogError(object sender, ScripterErrorEventArgs e)
{
//your code here
}
答案 1 :(得分:0)
您可以尝试像这样修改您的Scripter类
class Scripter
{
public event EventHandler<Exception> ErrorOcurred;
protected virtual void OnErrorOcurred(Exception e)=>ErrorOcurred?.Invoke(this, e);
public void ThrowsException()
{
try
{
throw new Exception("Throws exception");
}
catch (Exception ex)
{
OnErrorOcurred(ex);
}
}
}
这样您就可以订阅ErrorOcurred并接收有关异常的通知。您必须在捕获异常的每个地方调用OnErrorOcurred
希望这有帮助