Ref*_*din 32 .net c# multithreading exit winforms
我想知道我应该使用哪个.关闭我的WinForm应用程序在对话模式下触发一个窗体.该表单运行一个后台工作程序,它将数据库与远程数据库同步,并在"启动表单"上显示它的进度.
我有一个像这样的方法:
private void CloseMyApp()
{
SaveUserSettings();
splashForm = new SplashForm();
splashForm.ShowDialog();
Application.ExitThread();
//Application.Exit();
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的从菜单 - >退出和Form_FormClosing()事件中关闭我的应用程序. Application.Exit()给出以下错误 - >
收集被修改; 枚举操作可能无法执行.
现在我读到这Environment.Exit()是残酷的,意味着你的应用程序可能有问题(见这里).
Application.ExitThread() 虽然有效,但我认为它可能只是出现在工作中,因为在我不确定何时通常这样做之前我从未使用它.
Ree*_*sey 24
不幸的是,问题不是由这些问题引起的,并且在所有这些场景中确实存在(即使您没有收到消息).
你的问题是这样的:
在关闭模式下关闭我的WinForm应用程序激活窗体.该表单运行一个后台工作程序,它将数据库与远程数据库同步,并在"启动表单"上显示它的进度.
由于您在请求关闭时实际上并未关闭,因此所有"退出"功能都试图拆除后台线程.不幸的是,这可能发生在数据库同步的中间,并且在保存逻辑中工作的枚举可能会提供该错误.
我建议不要使用任何这些 - 只需拨打电话即可myMainForm.Close().这应该关闭你的主表单,这将适当地触发你的结束逻辑.一旦应用程序中的主窗体关闭,它将正常关闭.
Environment.Exit() 用于控制台应用程序.
你想用: System.Windows.Forms.Application.Exit()
通过退出线程,您只退出当前线程上下文,同时保持任何已启动的前台线程运行.我怀疑导致错误的线程仍在运行,所以你基本上掩盖了问题,而不是解决它.我会试着找出你"Collection was modified; enumeration operation may not execute."退出时出现这个错误的原因.它被曝光了Application.Exit(),但它不是由它引起的.