【问题标题】:When my C# form crashes it tries to create a new instance of itself当我的 C# 表单崩溃时,它会尝试创建自己的新实例
【发布时间】:2010-12-19 19:30:18
【问题描述】:

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

Application.Run(new SplashForm());

为什么会这样?调试起来很痛苦!

谢谢

【问题讨论】:

  • 发布更多代码! Application.Run 命令在 (try)catch 子句中吗?
  • 我不明白你想从这类细节中得到什么,请提出点对点的问题,提及适当的细节。
  • 我无法确定要发布什么代码 - 如果在任何时候出现任何故障(例如,如果我尝试处理不存在的数组值),它将尝试再次运行表单应用程序!我不确定如何确定是哪个位导致了问题,并想知道是否有任何愚蠢的明显事情需要检查! application.run 在 main() 中基本上是独立的,所以这不是问题。
  • 您在 Application.Run 中创建启动表单...主表单在哪里创建?
  • 然后在splashform构造函数中发布任何代码?

标签: c# arrays forms


【解决方案1】:

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

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

【讨论】:

  • 谢谢菲尔,看起来不错,我已经添加了它,但是任何错误仍然会导致它严重崩溃而不是触发异常,我应该在这里添加通用工作服吗?
【解决方案2】:

这是因为您试图在不存在的控件上调用 UI 线程。它可能会抛出 Cross-Thread 异常,并且因为您没有错误处理,所以它在 new SplashForm() 的返回点崩溃

当您在调试模式下运行应用程序时,请检查您的“输出”窗口以查看是否出现任何异常消息。 您可能会看到类似“从创建它的线程以外的线程访问的跨线程操作无效”这样的消息。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我已经有错误处理代码,但是当它被触发时,它仍然会导致 application.run()
    【解决方案4】:

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

    但是奇怪的行为,如果控件不存在,它会重新加载整个表单,有人可以解释一下吗?

    再次感谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 2021-08-27
      相关资源
      最近更新 更多