如何跟踪窗口窗体崩溃?就像任何事件被调用,或者任何其他东西被调用,或者我们可以跟踪窗口窗体是否崩溃?就像dispose被称为窗口窗体一样,窗体崩溃了。但是,为了跟踪窗口窗体的崩溃,还发生了什么呢?
类似的问题是我有一个窗口应用程序,在主窗体上有一个教程气球,它为主窗体上的每个控件移动,并通过一个接一个地指示主窗体上的控件来描述应用程序的功能。每次气球移动时,气球都会被处理并创建新的气球形式。
现在我想把气球坠毁时的步数插入到数据库中。我不明白我该怎么办?当气球窗口(窗口窗体)崩溃时会发生什么?有一个dispose事件发生了,但每次气球创建时都会发生,所以有没有其他东西可以跟踪崩溃?
编辑:很抱歉,我忘了说明它是.net Framework2.0的。
发布于 2011-01-03 19:57:54
在Program.cs文件中,将try/catch块放在Main()函数中。我们的想法是将Application.Run(这里是你的)放在这样一个块中。然后,在catch中,您可能会设法在DB中保存一些状态(例如气球使窗体崩溃的步骤)。祝好运!
发布于 2011-01-03 19:56:24
使用这个:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx
如果在forms线程中发生任何未处理的异常,它将出现在这里。如果为null,您将看到通常的对话框(发生未处理的异常,您可以继续或关闭,并查看堆栈跟踪)。
发布于 2011-01-03 20:40:46
这是我的一个Windows Forms 2.0小程序的摘录:
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException +=
applicationThreadException;
// Set the unhandled exception mode to force all Windows Forms
// errors to go through our handler.
Application.SetUnhandledExceptionMode(
UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException +=
currentDomainUnhandledException;
...
}使用这两个处理程序
private static void currentDomainUnhandledException(
object sender,
UnhandledExceptionEventArgs e)
{
handleException(e.ExceptionObject as Exception);
}和
private static void applicationThreadException(
object sender,
ThreadExceptionEventArgs e)
{
handleException(e.Exception);
}在我的示例中,处理异常的实际函数是:
private static void handleException(
Exception exception)
{
LogCentral.Current.LogError(
@"Exception occurred.",
exception);
if (ErrorForm.IsErrorFormShowing)
{
LogCentral.Current.LogInfo(
@"Error form already showing, not showing again.",
exception);
}
else
{
using (var form = new ErrorForm(exception))
{
var result = form.ShowDialog();
if (result == DialogResult.Abort)
{
Application.Exit();
}
}
}
}即,它通过log4net记录错误,然后显示错误表单,以向用户显示进一步的信息(异常消息),并允许退出应用程序。
https://stackoverflow.com/questions/4584168
复制相似问题