当我的C#表崩溃时,它会尝试创建自己的新实例

时间:2009-11-24 08:48:13

标签: c# arrays forms

我使用数组使用表单应用程序做了一些相当冗长的事情,有时我在开发期间错误地解决它,而不是明显的错误或崩溃整个应用程序重新启动并尝试运行:

Application.Run(new SplashForm());

为什么会这样?它使调试非常痛苦!

由于

4 个答案:

答案 0 :(得分:3)

您可能希望向应用程序添加错误处理。以下是我们使用的一些代码: -

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
        //Handle it here
        }

    }
}

谢谢,

菲尔。 http://exceptioneer.com

答案 1 :(得分:1)

这是因为你试图在非现有控件上调用UI线程。它可能会抛出跨线程异常,并且因为你没有错误处理,它会在新的SplashForm()的返回点崩溃

在调试模式下运行应用程序时,请检查“输出”窗口以查看是否显示任何异常消息。 你可能会看到一条消息,比如“跨线程操作无法从创建它的线程以外的线程访问。”

答案 2 :(得分:0)

检查您的项目是否有一个应用程序级错误处理程序,以确保一切正在冒泡。

您可能希望将错误处理代码放在应用程序的适当位置。

答案 3 :(得分:0)

好的感谢您的所有帮助,但我解决了,问题是它从背景工作者返回到RunWorkerCompletedEvent它正在设置标签属性,这工作正常,除了标签的名称不同于标签文本是设置,因为我以编程方式获取控件然后设置值很难诊断。

虽然奇怪的行为,如果控件不存在,它会重新加载整个表单,任何人都能解释一下吗?

再次感谢大家