我正在尝试找到一种方法来创建一个漂亮的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看起来像某些情况下内置的东西,但是有可能创建一些我可以调用的可修改/自定义的吗?
抱歉,我无意中粘贴了错误的代码部分。我目前正在使用一个消息框,但是想要一些带有一些功能按钮的更加强大的功能。
非常感谢。
答案 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)