我使用数组使用表单应用程序做了一些相当冗长的事情,有时我在开发期间错误地解决它,而不是明显的错误或崩溃整个应用程序重新启动并尝试运行:
Application.Run(new SplashForm());
为什么会这样?它使调试非常痛苦!
由于
答案 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
}
}
}
谢谢,
答案 1 :(得分:1)
这是因为你试图在非现有控件上调用UI线程。它可能会抛出跨线程异常,并且因为你没有错误处理,它会在新的SplashForm()的返回点崩溃
在调试模式下运行应用程序时,请检查“输出”窗口以查看是否显示任何异常消息。 你可能会看到一条消息,比如“跨线程操作无法从创建它的线程以外的线程访问。”
答案 2 :(得分:0)
检查您的项目是否有一个应用程序级错误处理程序,以确保一切正在冒泡。
您可能希望将错误处理代码放在应用程序的适当位置。
答案 3 :(得分:0)
好的感谢您的所有帮助,但我解决了,问题是它从背景工作者返回到RunWorkerCompletedEvent它正在设置标签属性,这工作正常,除了标签的名称不同于标签文本是设置,因为我以编程方式获取控件然后设置值很难诊断。
虽然奇怪的行为,如果控件不存在,它会重新加载整个表单,任何人都能解释一下吗?
再次感谢大家