使用catch的异常信息创建Windows窗体?

时间:2012-10-25 13:58:55

标签: c# winforms exception-handling try-catch

我正在尝试找到一种方法来创建一个漂亮的Windows窗体,当我遇到未处理的异常时会弹出它。我目前有:

// Add the event handler for handling UI thread exceptions
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException );

// Add the event handler for handling non-UI thread exceptions
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurrentDomain_UnhandledException );

static void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e )
{
    MessageBox.Show( e.ToString( ), "Unhandled Non-UI Thread Exception" );
}

static void Application_ThreadException( object sender, ThreadExceptionEventArgs e )
{
    MessageBox.Show( e.ToString( ), "Unhandled UI Thread Exception" );
}

但我正在寻找的是,在threadexception方法中,弹出一个包含错误信息的窗体,然后继续/退出/重启。这听起来非常类似于通过gooogling看起来像某些情况下内置的东西,但是有可能创建一些我可以调用的可修改/自定义的吗?

抱歉,我无意中粘贴了错误的代码部分。我目前正在使用一个消息框,但是想要一些带有一些功能按钮的更加强大的功能。

非常感谢。

6 个答案:

答案 0 :(得分:4)

弹出MessageBox怎么样?看看http://www.dotnetperls.com/messagebox-show

答案 1 :(得分:4)

所有活动都应该包含在如下代码中:

DialogResult result = DialogResult.Retry;
while (result == DialogResult.Retry) {
    try {
        DoProcess();
        break;
    }
    catch (Exception ex) {
        result = MessageBox.Show(ex.ToString(), 
                    "Error Information", 
                    MessageBoxButtons.AbortRetryIgnore,
                    MessageBoxIcon.Exclamation);
        if (result == DialogResult.Abort) throw;
    }
}

DoProcess()将成为风险代码。

答案 2 :(得分:3)

当然,只需创建任何旧表单,然后使用ShowDialog显示它。你可以把任何你想要的东西放在上面。然后,您可以在其上放置各种按钮以“继续”,“重新启动”,“退出”等。然后,您可以在ShowDialog返回后检查表单的属性,以根据单击的按钮确定要执行的操作

答案 3 :(得分:0)

创建一个自定义窗口,当您收到错误时会弹出窗口。然后您可以决定是关闭应用程序,继续还是退出某个过程。

我能想到的最好的方法是创建一个自定义异常,当您的应用程序中出现特定问题时,您将抛出该异常。然后,您应该允许此异常冒泡并在以下之一中处理。

Application.ThreadException AppDomain.CurrentDomain.UnhandledException

查看此链接以获取更多信息。

msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

答案 4 :(得分:0)

创建自定义消息框。这应该继承自From

class MyDialog : Form
    {
        //your properties like buttons and all goes here
    private Button okButton;
    private Button cancelButton;

        okButton = new Button();
        okButton.DialogResult = DialogResult.OK;
        okButton.Location = new Point(20, 260);
        okButton.Size = new Size(80, 25);
        okButton.Text = "OK";
        okButton.Click += new EventHandler(okButton_ClickCompany);
        Controls.Add(okButton);

        //same implementation for all other controls you define
    }

你的实施就像

    MyDialog myDialog = new MyDialog(); // you can constructor for using it everywhere
        if (myDialog.ShowDialog() == DialogResult.OK)
        {
             //you code goes here
        }

这是非常好的做法。 您可以根据需要扩展它,并通过定义多个构造函数

以多种方式使用它

答案 5 :(得分:0)