2017-04-26 11 views
0

私はdllスクリプトを持っています。その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()を使用して何が起こったのかを確認できますか?

+1

あなただけの '' Scripter'クラスの例外をthrow'と 'のtry/catchでそれらをキャッチすることができます'あなたのアプリケーションでは、イベントを作成する必要はありません。 – Pikoh

+0

これは実際には非常に簡単ですが、私はそれに対して助言します。例外とイベントは全く異なるものですが、例外をイベントを使って処理するのではなく、代わりにtry ... catchを使用するべきです。 –

答えて

0

あなたはこの

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に加入し、例外に関する通知を受け取ることができます。この方法は、あなたのスクリプターのクラスを変更しようとすることができます。あなたはPicohとゾルタンは、あなたが簡単に方法がtry/catchブロック内Scripterメソッドの呼び出しをラップすることができますあなたの質問にコメントとしてこれは

+0

ありがとうございました – Essien

1

を助け

希望の例外をキャッチし、すべての場所でOnErrorOcurred呼び出す必要があります。しかし、あなたは(カスタム引数付き)イベントを使用する場合、あなたはこのような何かを行うことができます。

//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 
} 
関連する問題