Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用Application.Exit()时由于集合修改而导致System.InvalidOperationException_C#_.net_Invalidoperationexception - Fatal编程技术网

C# 调用Application.Exit()时由于集合修改而导致System.InvalidOperationException

C# 调用Application.Exit()时由于集合修改而导致System.InvalidOperationException,c#,.net,invalidoperationexception,C#,.net,Invalidoperationexception,我有一个非常,非常奇怪的错误,我一直无法确定(这种情况很少发生)。基本上,我有一个C#应用程序,它在退出时随机抛出一个未知异常。这次我设法在调试器中捕获了它,结果表明调用Application.Exit()会抛出一个System.invalidoOperationException,并显示以下消息: mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常 附加信息:集合已修改;枚举操作不能执行 我不确定这个据称被修改过的收藏是什么

我有一个非常,非常奇怪的错误,我一直无法确定(这种情况很少发生)。基本上,我有一个C#应用程序,它在退出时随机抛出一个未知异常。这次我设法在调试器中捕获了它,结果表明调用
Application.Exit()
会抛出一个
System.invalidoOperationException
,并显示以下消息:

mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常

附加信息:集合已修改;枚举操作不能执行

我不确定这个据称被修改过的收藏是什么,或者是谁修改了它

堆栈跟踪没有多大帮助:

mscorlib.dll!System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext() +0x13f字节系统.Windows.Forms.dll!System.Windows.Forms.Application.ExitInternal() +0x112字节System.Windows.Forms.dll!System.Windows.Forms.Application.Exit(System.ComponentModel.CancelEventArgs e) +0x65字节


你知道我怎样才能知道哪个ArrayList被修改了吗?我不认为我在做任何明确的事情,更可能的是我在操作过程中修改.NET framework的基本状态,这是MS没有预料到的。

不同寻常,以前从未见过。方法的作用是迭代Application.OpenForms集合。显然,此集合正在进行修改。造成这种情况的可能原因很少,我只能提出一个。您的一个表单已重写OnFormClosing()方法或订阅FormClosing事件。并且正在做一些修改OpenForms集合的事情。可能是处理表单对象或创建新表单实例,或修改导致重新创建窗口的表单属性,如ShowInTaskbar


在调用堆栈中找不到此代码。查看您的On/FormClosing代码。如果您不能快速找到代码,请将其注释掉。

我们也在这个问题上花了几天时间。。。我们从中得到了“System.invalidoOperationException”异常和应用程序(在本例中使用的是来自DynamSoft的twain库)。显然,我们不应该在调用application.exit之后调用CLOSE()。注释结束使异常消失,并使应用程序正常结束。从视觉上看,该应用程序会显示一个来自微软的奇怪消息框,上面写着“你想提交关于这个问题的更多信息吗”-什么问题?在此之前,它没有显示任何内容,所以我们开始挖掘堆栈痕迹

                Utils.Logger.Info("", "AsystScanner/dynamicDotNetTwain2_OnPostAllTransfers");
                Utils.Logger.Info("Closing down application!", "AsystScanner/dynamicDotNetTwain2_OnPostAllTransfers");

                // caller should close down app, added 3/3/15
                dynamicDotNetTwain2.CloseSource();
                dynamicDotNetTwain2.CloseSourceManager();

                System.Windows.Forms.Application.Exit();
no no!  don't do a close here.
                //try
                //{
                //    Close();
                //}
                //catch (Exception ex)
                //{
                //    MessageBox.Show(ex.Message + "  Routine=dynamicDotNetTwain2_OnPostAllTransfers/Close() statement failed. [EJS1503031630]");
                //}
                return;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "  Routine=dynamicDotNetTwain2_OnPostAllTransfers [EJS1503031631]");
            }

听起来像是表单集合。IIRC我以前见过这种情况,但不记得任何细节,抱歉。你的应用程序在关机时做什么?你能提供密码吗?没什么,真的。。。当我按下退出按钮时,应用程序处于空闲状态,没有后台线程或活动在运行。我有这个问题,因为我有一个表单是在初始线程以外的线程上创建的。检查每个表单的
FormClosing
FormClosing
事件。在线程上运行的表单是否与主GUI不同?刚刚注意到“第一次机会异常”-您确定看到的是正确的异常吗?()我确实有一个相当复杂的表单关闭代码,有时会打开消息框。无论如何,从Application.Exit()更改为this.Close()似乎解决了这些问题,而无需我更改FormClosing的内容。@Hans Passant,有着完全相同的问题;果然,我在我的
Form\u CLOSING
方法中显示了一个消息框。和吊杆,相同的收集修改。真傻。将其移动到
表格_关闭
且状态良好。有点奇怪,但嘿,这个结果太棒了。这也正是我的问题,OnClosing中的MessageBox使应用程序无效。退出open forms迭代器。将其移动到OnClosed修复了它!