Application.ThreadException イベント
トラップされないスレッドの例外がスローされると、発生します。
Public Shared Event ThreadException As ThreadExceptionEventHandler
[C#]
public static event ThreadExceptionEventHandler ThreadException;
[C++]
public: static __event ThreadExceptionEventHandler* ThreadException;
[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。
イベント データ
イベント ハンドラが、このイベントに関連するデータを含む、ThreadExceptionEventArgs 型の引数を受け取りました。次の ThreadExceptionEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 説明 |
---|---|
Exception | 発生した Exception を取得します。 |
解説
このイベントを使用すると、他の方法では処理されない例外を Windows Forms アプリケーションで処理できます。これらの例外が発生するとアプリケーションは不明な状態に陥るため、これらの例外を処理するには、 ThreadException イベントに適切なイベント ハンドラを結び付けてください。可能であれば、構造化例外処理ブロックで例外を処理するようにしてください。
使用例
[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 the code to create a form with a button.
' Programs the button to throw an 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
' Creates a class to handle the exception event.
Private 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 the code to create a form with a button.
// Programs the button to throw an 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 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 the code to create a form with a button.
// Programs the button to throw an 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 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 = 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 ファミリ
.NET Framework セキュリティ:
- SecurityPermission (イベントにハンドラを追加するときに、直前の呼び出し元がアンマネージ コードを呼び出すために必要なアクセス許可) SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
参照
Application クラス | Application メンバ | System.Windows.Forms 名前空間