Application.OnThreadException メソッド
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)


このイベントによって、アプリケーションで例外をインテリジェントに処理できるようになります。ウィンドウ プロシージャでスレッドの例外を受け取ると、ウィンドウ プロシージャがこのイベントを呼び出します。イベント ハンドラをこのイベントに結び付けます。
イベントが発生すると、デリゲートを使用してイベント ハンドラが呼び出されます。詳細については、「イベントの発生」を参照してください。
OnThreadException メソッドを使用すると、デリゲートを結び付けずに、派生クラスでイベントを処理することもできます。派生クラスでイベントを処理する場合は、この手法をお勧めします。
![]() |
---|
Application クラスには ThreadException イベントが含まれています。このイベントにイベント ハンドラを結び付けることで、必要なカスタム処理を実行できます。 |

フォームで button1 をクリックすることによって、ThreadException イベントを発生させるコード例を次に示します。この例では、次の 2 つのクラスを作成します。ErrorHandler クラスは、フォーム、およびイベントを発生させるボタンを作成します。CustomExceptionHandler クラスは、例外を処理するためのメソッドを提供します。
ErrorHandler クラスの Main では、コードが例外処理クラスの新しいインスタンス (CustomExceptionHandler のインスタンス) を作成します。次に、作成されたインスタンスがイベントに追加され、アプリケーションが実行 (Run) されます。
この例では、CustomExceptionHandler クラスの OnThreadException メソッドで、try...catch...finally ステートメントを使用して例外を処理しています。ShowThreadExceptionDialog メソッドは、表示するメッセージを作成し、そのメッセージをメッセージ ボックスに表示します。
Imports System Imports System.IO Imports System.Windows.Forms Imports System.Threading Imports System.Drawing Public Class Form1 Inherits Form ' Inserts code to create a form with a button. Private WithEvents Button1 As Button Sub New() Me.Size = New Size(600, 100) Button1 = New Button() Button1.Text = "Click Me" Button1.Location = New Point(10, 10) Me.Controls.Add(Button1) End Sub ' Programs the button to throw the exception when clicked. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 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 Form1()) End Sub End Class ' Create a class to handle the exception event. Friend Class CustomExceptionHandler ' Handles the exception event. Public Sub OnThreadException(ByVal sender As Object, ByVal 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(ByVal 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
using System; using System.Windows.Forms; using System.Threading; using System.Drawing; public class Form1 : Form { // Inserts code to create a form with a button. Button button1; private Form1() { this.Size = new Size(600, 100); button1 = new Button(); button1.Click += new EventHandler(button1_Click); button1.Text = "Click Me"; button1.Location = new Point (10, 10); this.Controls.Add(button1); } // 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 Form1()); } } // 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); } }
public: // Creates a class to throw the error. ref 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 gcnew ArgumentException( "The parameter was invalid" ); } public: static void Main() { // Creates an instance of the methods that will handle the exception. CustomExceptionHandler ^ eh = gcnew CustomExceptionHandler; // Adds the event handler to the event. Application::ThreadException += gcnew ThreadExceptionEventHandler( eh, &Form1::CustomExceptionHandler::OnThreadException ); // Runs the application. Application::Run( gcnew ErrorHandler ); } }; // Creates a class to handle the exception event. internal: ref class CustomExceptionHandler { public: // Handles the exception event. 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( "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: System::Windows::Forms::DialogResult ShowThreadExceptionDialog( Exception^ e ) { String^ errorMsg = "An error occurred please contact the adminstrator with the following information:\n\n"; errorMsg = String::Concat( errorMsg, e->Message, "\n\nStack Trace:\n", e->StackTrace ); return MessageBox::Show( errorMsg, "Application Error", MessageBoxButtons::AbortRetryIgnore, MessageBoxIcon::Stop ); } };
// Creates a class to throw the error. public static class ErrorHandler extends 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"); } //button1_Click 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.add_ThreadException( new ThreadExceptionEventHandler(eh.OnThreadException)); // Runs the application. Application.Run(new ErrorHandler()); } //main } //ErrorHandler // Creates a class to handle the exception event. private static class CustomExceptionHandler { // Handles the exception event. private void OnThreadException(Object sender, ThreadExceptionEventArgs t) { DialogResult result = DialogResult.Cancel; try { result = this.ShowThreadExceptionDialog(t.get_Exception()); } catch (System.Exception exp) { try { MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); } finally { Application.Exit(); } } // Exits the program when the user clicks Abort. if (result.Equals(DialogResult.Abort)) { Application.Exit(); } } //OnThreadException // Creates the error message and displays it. private DialogResult ShowThreadExceptionDialog(System.Exception e) { String errorMsg = "An error occurred please contact the" + " administrator with the following information:\n\n"; errorMsg = errorMsg + e.get_Message() + "\n\nStack Trace:\n" + e.get_StackTrace(); return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); } //ShowThreadExceptionDialog } //CustomExceptionHandler public static void main(String[] args) { ErrorHandler.main(args); }//main

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からApplication.OnThreadException メソッドを検索する場合は、下記のリンクをクリックしてください。

- Application.OnThreadException メソッドのページへのリンク