Application.OnThreadException メソッド
ThreadException イベントを発生させます。
Public Shared Sub OnThreadException( _
ByVal t As Exception _)
[C#]
public static void OnThreadException(Exceptiont);
[C++]
public: static void OnThreadException(Exception* t);
[JScript]
public static function OnThreadException(
t : Exception);
パラメータ
- t
スローされた例外を表す Exception 。
解説
このイベントによって、アプリケーションで例外をインテリジェントに処理できるようになります。ウィンドウ プロシージャでスレッドの例外を受け取ると、ウィンドウ プロシージャがこのイベントを呼び出します。イベント ハンドラをこのイベントに結び付けます。
イベントが発生すると、デリゲートを使用してイベント ハンドラが呼び出されます。詳細については、「 イベントの発生 」を参照してください。
System.Windows.Forms.OnThreadException メソッドを使用すると、デリゲートを結び付けずに、派生クラスでイベントを処理することもできます。派生クラスでイベントを処理する場合は、この手法をお勧めします。
メモ Application クラスには System.Windows.Forms.ThreadException イベントが含まれています。このイベントにイベント ハンドラを結び付けることで、必要なカスタム処理を実行できます。
継承時の注意: 派生クラスで OnThreadException をオーバーライドする場合は、登録されているデリゲートがイベントを受け取ることができるように、基本クラスの OnThreadException を呼び出てください。
使用例
[Visual Basic, C#, C++] フォームで button1
をクリックすることによって、 ThreadException イベントを発生させる例を次に示します。この例では、次の 2 つのクラスを作成します。 ErrorHandler
クラスは、フォーム、およびイベントを発生させるボタンを作成します。 CustomExceptionHandler
クラスは、例外を処理するためのメソッドを提供します。
[Visual Basic, C#, C++] ErrorHandler
クラスの Main
では、コードが例外処理クラスの新しいインスタンス (CustomExceptionHandler
のインスタンス) を作成します。次に、作成されたインスタンスがイベントに追加され、アプリケーションが実行 (Run) されます。
[Visual Basic, C#, C++] この例では、 CustomExceptionHandler
クラスの OnThreadException
メソッドで、 try...catch...finally ステートメントを使用して例外を処理しています。 ShowThreadExceptionDialog
メソッドは、表示するメッセージを作成し、そのメッセージをメッセージ ボックスに表示します。
' Creates a class to throw the error.
Public Class ErrorHandler
Inherits System.Windows.Forms.Form
' Inserts code to create a form with a button.
' Programs the button to throw the exception when clicked.
Private Sub button1_Click(sender As object, e As System.EventArgs)
Throw New ArgumentException("The parameter was invalid")
End Sub
<STAThread()> _
Shared Sub Main()
' Creates an instance of the methods that will handle the exception.
Dim eh As CustomExceptionHandler = New CustomExceptionHandler()
' Adds the event handler to the event.
AddHandler Application.ThreadException, AddressOf eh.OnThreadException
' Runs the application.
Application.Run(New ErrorHandler())
End Sub
End Class
' Create a class to handle the exception event.
Public Class CustomExceptionHandler
' Handles the exception event.
Public Sub OnThreadException(sender As object, t As ThreadExceptionEventArgs)
Dim result As DialogResult = System.Windows.Forms.DialogResult.Cancel
Try
result = Me.ShowThreadExceptionDialog(t.Exception)
Catch
Try
MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop)
Finally
Application.Exit()
End Try
End Try
' Exits the program when the user clicks Abort.
If (result = System.Windows.Forms.DialogResult.Abort) Then
Application.Exit()
End If
End Sub
' Creates the error message and displays it.
Private Function ShowThreadExceptionDialog(e As Exception) As DialogResult
Dim errorMsg As StringWriter = New StringWriter()
errorMsg.WriteLine("An error occurred please contact the adminstrator with the following information:")
errorMsg.WriteLine("")
errorMsg.WriteLine(e.Message)
errorMsg.WriteLine("")
errorMsg.WriteLine("Stack Trace:")
errorMsg.WriteLine(e.StackTrace)
Return MessageBox.Show(errorMsg.ToString(), "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop)
End Function
End Class
[C#]
// Creates a class to throw the error.
public class ErrorHandler : System.Windows.Forms.Form {
// Inserts code to create a form with a button.
// Programs the button to throw the exception when clicked.
private void button1_Click(object sender, System.EventArgs e) {
throw new ArgumentException("The parameter was invalid");
}
public static void Main(string[] args) {
// Creates an instance of the methods that will handle the exception.
CustomExceptionHandler eh = new CustomExceptionHandler();
// Adds the event handler to the event.
Application.ThreadException += new ThreadExceptionEventHandler(eh.OnThreadException);
// Runs the application.
Application.Run(new ErrorHandler());
}
}
// Creates a class to handle the exception event.
internal class CustomExceptionHandler {
// Handles the exception event.
public void OnThreadException(object sender, ThreadExceptionEventArgs t)
{
DialogResult result = DialogResult.Cancel;
try
{
result = this.ShowThreadExceptionDialog(t.Exception);
}
catch
{
try
{
MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
// Exits the program when the user clicks Abort.
if (result == DialogResult.Abort)
Application.Exit();
}
// Creates the error message and displays it.
private DialogResult ShowThreadExceptionDialog(Exception e) {
string errorMsg = "An error occurred please contact the adminstrator with the following information:\n\n";
errorMsg = errorMsg + e.Message + "\n\nStack Trace:\n" + e.StackTrace;
return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
}
}
[C++]
// Creates a class to throw the error.
public:
__gc class ErrorHandler : public System::Windows::Forms::Form {
// Inserts code to create a form with a button.
// Programs the button to throw the exception when clicked.
private:
void button1_Click(Object* /*sender*/, System::EventArgs* /*e*/) {
throw new ArgumentException(S"The parameter was invalid");
}
public:
static void Main() {
// Creates an instance of the methods that will handle the exception.
CustomExceptionHandler* eh = new CustomExceptionHandler();
// Adds the event handler to the event.
Application::ThreadException += new ThreadExceptionEventHandler(eh, &Form1::CustomExceptionHandler::OnThreadException);
// Runs the application.
Application::Run(new ErrorHandler());
}
};
// Creates a class to handle the exception event.
public private:
__gc class CustomExceptionHandler {
// Handles the exception event.
public:
void OnThreadException(Object* /*sender*/, ThreadExceptionEventArgs* t)
{
System::Windows::Forms::DialogResult result = System::Windows::Forms::DialogResult::Cancel;
try
{
result = this->ShowThreadExceptionDialog(t->Exception);
}
catch( Exception* )
{
try
{
MessageBox::Show(S"Fatal Error", S"Fatal Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop);
}
__finally
{
Application::Exit();
}
}
// Exits the program when the user clicks Abort.
if (result == DialogResult::Abort)
Application::Exit();
}
// Creates the error message and displays it.
private:
System::Windows::Forms::DialogResult ShowThreadExceptionDialog(Exception* e) {
String* errorMsg = S"An error occurred please contact the adminstrator with the following information:\n\n";
errorMsg = String::Concat( errorMsg, e->Message, S"\n\nStack Trace:\n", e->StackTrace );
return MessageBox::Show(errorMsg, S"Application Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop);
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
Application クラス | Application メンバ | System.Windows.Forms 名前空間