我正在制作图像编辑程序。在这一点上,我想实现一种从用户那里获取有关程序崩溃时他正在做什么的信息的方法。目前我只设法通过Exception
向我发送电子邮件。我正在创建第二个表单,当程序启动时,我有一个RichTextBox
,我要求用户解释他当时正在做什么。当我看到电子邮件离开时没有解释,新表单几乎立即关闭我尝试在不同的线程上创建它,仍然具有相同的结果。我正在UnhandledException
事件中做所有这些事情。为了测试它,我在向事件添加处理程序后立即提出new Exception()
。
我可以使用不同的方法吗?
private void reportCrash(object sender, UnhandledExceptionEventArgs e)
{
ParameterizedThreadStart pth = new ParameterizedThreadStart(reviewForm);
crash = new Thread(pth);
crash.Start(e.ExceptionObject.ToString());
}
private void reviewForm(object exception)
{
Form f = popForm("Feedback/ Bug Report", 500, 700);
Label name_lb = popLabel(150, 50, "Display name: ", f);
TextBox name = popText(250, 50, f);
Label message_lb = popLabel(100, 100, "Please describe what were you doing when the bug occured:", f);
RichTextBox message = popRichText(100, 130, 300, 400, f);
Button bt = popButton(200, 550, "Send", f);
bt.Click += (sender, e) => { sendBug(sender, e, (string)exception); };
}
private void sendBug(object sender, EventArgs e, string exception)
{
string message = "Report sent by: ";
message += ((Button)sender).FindForm().Controls[1].Text + "\n\n";
message += "User's message:\n";
message += ((Button)sender).FindForm().Controls[3].Text + "\n\n";
message += "Exception:\n" + exception;
sendReport(message, "Crash report");
((Button)sender).FindForm().Close();
}
所有“pop”方法都会创建他们指定的控件,我会在程序中经常使用它们。
Form popForm(string txt, int w, int h)
{
Form f = new Form();
f.Text = txt;
f.Size = new Size(w, h);
f.Show();
return f;
}