Windowsアプリケーションで作業し、さまざまなexeを開き、SendKeysを使用して動作します。各EXEのtry catchを使用します。すべての例外メッセージはユーザーに郵送されます。このネストされたtryキャッチ内のすべての例外をキャッチして文字列に連結する
private void Form1_Load(object sender, EventArgs e)
{
Log("start");
try{
#region "Process1"
try
{
Log("Beginning Process1()");
Process1();
smtp("process 1 success");
Log("Process1() completed");
}
catch(Exception ex)
{
ExceptionLogFile(ex.Message, "Process1()", 27, "Form1.cs");
}
#endregion
#region "Process2"
try
{
Log("Starting Process2");
Process2();
smtp("process 2 success");
Log("Process2 completed");
}
catch (Exception ex)
{
ExceptionLogFile(ex.Message, "Process2", 27, "Form1.cs");
}
#endregion
#region "Process 3"
try
{
Log("Starting Process3");
Process3();
smtp("Process 3 success");
Log("Process3 completed");
}
catch (Exception ex)
{
ExceptionLogFile(ex.Message, "Process3", 61, "Form1.cs");
}
#endregion
}
catch(Exception ex)
{
smtp(ex.Message);
}
}
ような何か最後のcatchブロックは、基本的に私がトリガーされるメールの数を減らすことができるように捉え、すべての可能な例外を連結する必要があります。
P.S. smtp()は、メールを生成するために使用するメソッドです。渡されるパラメーターは、メール
public void Process1()
{
Process p = Process.Start("Process1");
p.WaitForInputIdle();
SetParent(p.MainWindowHandle, this.Handle);
IntPtr h = p.MainWindowHandle;
SendKeys.Send("{TAB}");
SendKeys.SendWait("{Enter}");
}
タブのボディで、プロセス1の窓(のボタンを操作するために使用されている入力してください)
問題?それぞれのcatchブロックで 'smtp(ex.Message)'を呼び出します。 –
私は彼が 'StringBuilder'を作成し、各' catch'ブロックに例外とプロセス名からメッセージを追加するべきだと思います。最後に、彼はメッセージとして 'StringBuilder'の内容(もしあれば)をメールに送ります。プロセスが非同期で実行されている場合は、別のコードが必要になります。 – mortb
各catchブロックで例外を再投入しない限り、最終的なcatchブロックは(smtp()呼び出しで)入力しません。しかし、例外を再現すると、複数の例外が発生することはありません。 –