我想弄清楚,我应该使用。在关闭表单的我的WinForm程序火灾对话模式。这种形式运行的后台工作的同步操作数据库与远程数据库并显示它的进展“扑通表”。

我有像这样的方法:

private void CloseMyApp()
{
    SaveUserSettings();

    splashForm = new SplashForm();
    splashForm.ShowDialog();

    Application.ExitThread();
    //Application.Exit();
}

这就是我所说的,从菜单关闭我的应用程序 - >退出并在Form_FormClosing()事件。 Application.Exit()提供了以下错误 - >

  

集合已修改;枚举操作可能无法执行。

现在,我读了Environment.Exit()是残酷和手段有可能出错了您的应用程序(见的此处)。

Application.ExitThread()的作品,但我concered它可能只出现工作和我从来没有使用它之前我不知道,当它通常适合这样做。

有帮助吗?

解决方案

不幸的是,这个问题是不是由任何这些造成的,确实存在于所有这些情况下(即使你没有得到的消息)。

您的问题是:

  

在闭合形式的我的winform应用程序火灾对话模式。这种形式运行的背景工人的同步操作的DB与远程DB,并显示它的进展“飞溅表”。

既然你没有真正关闭,当你要求关闭,所有的“退出”功能正在试图推倒你的后台线程。不幸的是,这可能是发生在你数据库同步的中间和枚举在保存逻辑工作可能是提供错误。

我会建议不使用任何这些 - 只需拨打myMainForm.Close()代替。这应该关闭你的主要形式,这将相应地激发您的交易逻辑。一旦你的应用程序的主窗体关闭,它会正常关闭。

其他提示

Environment.Exit()用于控制台应用程序。

您想使用:System.Windows.Forms.Application.Exit()

通过退出线程,你只退出当前线程上下文,同时留下任何启动前台线程运行。我怀疑是导致错误仍在运行的线程,所以你已经基本上掩盖了问题,而不是围绕它的工作。我会试着找出为什么你正在退出这个错误"Collection was modified; enumeration operation may not execute."。它被由Application.Exit()曝光,但它不是由它引起的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top