首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跟踪窗口窗体的崩溃?

问如何跟踪窗口窗体的崩溃?
EN

Stack Overflow用户
提问于 2011-01-03 19:52:05
回答 3查看 3.9K关注 0票数 3

如何跟踪窗口窗体崩溃?就像任何事件被调用,或者任何其他东西被调用,或者我们可以跟踪窗口窗体是否崩溃?就像dispose被称为窗口窗体一样,窗体崩溃了。但是,为了跟踪窗口窗体的崩溃,还发生了什么呢?

类似的问题是我有一个窗口应用程序,在主窗体上有一个教程气球,它为主窗体上的每个控件移动,并通过一个接一个地指示主窗体上的控件来描述应用程序的功能。每次气球移动时,气球都会被处理并创建新的气球形式。

现在我想把气球坠毁时的步数插入到数据库中。我不明白我该怎么办?当气球窗口(窗口窗体)崩溃时会发生什么?有一个dispose事件发生了,但每次气球创建时都会发生,所以有没有其他东西可以跟踪崩溃?

编辑:很抱歉,我忘了说明它是.net Framework2.0的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-03 19:57:54

在Program.cs文件中,将try/catch块放在Main()函数中。我们的想法是将Application.Run(这里是你的)放在这样一个块中。然后,在catch中,您可能会设法在DB中保存一些状态(例如气球使窗体崩溃的步骤)。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2011-01-03 19:56:24

使用这个:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

如果在forms线程中发生任何未处理的异常,它将出现在这里。如果为null,您将看到通常的对话框(发生未处理的异常,您可以继续或关闭,并查看堆栈跟踪)。

票数 5
EN

Stack Overflow用户

发布于 2011-01-03 20:40:46

这是我的一个Windows Forms 2.0小程序的摘录:

代码语言:javascript
复制
[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;

    ...
}

使用这两个处理程序

代码语言:javascript
复制
private static void currentDomainUnhandledException(
    object sender,
    UnhandledExceptionEventArgs e)
{
    handleException(e.ExceptionObject as Exception);
}

和

代码语言:javascript
复制
private static void applicationThreadException(
    object sender,
    ThreadExceptionEventArgs e)
{
    handleException(e.Exception);
}

在我的示例中,处理异常的实际函数是:

代码语言:javascript
复制
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记录错误,然后显示错误表单,以向用户显示进一步的信息(异常消息),并允许退出应用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4584168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档