ThreadExceptionEventArgs クラス
ThreadException イベントのデータを提供します。
この型のすべてのメンバの一覧については、ThreadExceptionEventArgs メンバ を参照してください。
System.Object
System.EventArgs
System.Threading.ThreadExceptionEventArgs
Public Class ThreadExceptionEventArgs
Inherits EventArgs
[C#]
public class ThreadExceptionEventArgs : EventArgs
[C++]
public __gc class ThreadExceptionEventArgs : public EventArgs
[JScript]
public class ThreadExceptionEventArgs extends EventArgs
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
ThreadExceptionEventArgs は、処理されない例外が発生したときにスレッドによって作成されます。 ThreadExceptionEventArgs は、発生した Exception を保持します。
使用例
[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
Public Shared Sub Main()
' Creates an instance of the methods that will handle the exception.
Dim eh As New CustomExceptionHandler()
' Adds the event handler to 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.
Friend Class CustomExceptionHandler
'Handles the exception event
Public Sub OnThreadException(sender As Object, t As ThreadExceptionEventArgs)
Dim result As DialogResult = 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 = DialogResult.Abort Then
Application.Exit()
End If
End Sub
' Creates the error message and display it.
Private Function ShowThreadExceptionDialog(e As Exception) As DialogResult
Dim errorMsg As String = "An error occurred please contact the " & _
"adminstrator with the following information:" & _
Microsoft.VisualBasic.ControlChars.Cr & _
Microsoft.VisualBasic.ControlChars.Cr
errorMsg &= e.Message & Microsoft.VisualBasic.ControlChars.Cr & _
Microsoft.VisualBasic.ControlChars.Cr & "Stack Trace:" & _
Microsoft.VisualBasic.ControlChars.Cr & e.StackTrace
Return MessageBox.Show(errorMsg, "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 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 display 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 handle the exception event.
private __gc class CustomExceptionHandler {
//Handles the exception event
public:
void OnThreadException(Object* /*sender*/, ThreadExceptionEventArgs* t)
{
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 display it.
private:
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);
}
};
// 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");
}
};
int 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, &CustomExceptionHandler::OnThreadException);
// Runs the application.
Application::Run(new ErrorHandler());
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Threading
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System (System.dll 内)
参照
ThreadExceptionEventArgs メンバ | System.Threading 名前空間 | Thread | ThreadStart | ThreadExceptionEventHandler