System.InvalidOperationExceptionduetomodifyingcollectionwhilecallingApplication.Exit()我有这个非常非常奇怪的错误,我从来没有遇到过能够识别(很少发生)。基本上,我有一个在退出时随机抛出未知异常的C#应用程序。这次我设法在调试器中捕获了它,事实证明调用Application.Exit()会引发System.InvalidOperationException并显示以下消息:Afirstchanceexceptionoftype'System.InvalidOperationException'occurredinmscorlib.dllSupplementaryinformation:集合已修改;可能无法执行枚举操作。我不确定这个据称修改过的集合是什么,或者是谁修改了它。堆栈跟踪不是很有帮助:mscorlib.dll!System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()+0x13f字节System.Windows.Forms.dll!System.Windows.Forms.Application.ExitInternal()+0x112字节System.Windows.Forms.dll!系统。Windows.Forms.Application.Exit(System.ComponentModel.CancelEventArgse)+0x65字节知道如何找出哪些ArrayLists已被修改吗?我不认为这是我在做的任何事情,更有可能是我在MS未预料到的操作过程中执行修改.NET框架基础状态的操作。不寻常,以前从未见过这种情况。Application.ExitInternal()方法迭代Application.OpenForms集合。很明显,集合正在被修改。造成这种情况的可能原因很少,我只能想到一个。其中一个表单已覆盖OnFormClosing()方法或订阅了FormClosing事件。并且正在做一些修改OpenForms集合的事情。可以处理表单对象或创建新的表单实例或修改导致重新创建窗口的表单属性,例如ShowInTaskbar。您将无法在调用堆栈中找到此代码。查看您的On/FormClosing代码。如果无法快速找到代码,请将其注释掉。我们在这个问题上花了好几天的时间……我们收到“System.InvalidOperationException”异常和应用程序(在本例中使用DynamSoft的twain库)。显然我们不应该在调用application.exit之后调用CLOSE()。注释掉off使异常消失,应用程序正常结束。从视觉上看,该应用程序会显示一个来自Microsoft的奇怪消息框,上面写着“你想提交有关此问题的更多信息吗”——这是什么问题?直到那时它才显示任何内容,所以我们开始挖掘堆栈跟踪。以上就是C#学习教程的全部内容:调用Application.Exit()时修改集合引发System.InvalidOperationException。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—Utils.Logger.Info("","AsystScanner/dynamicDotNetTwain2_OnPostAllTransfers");Utils.Logger.Info("正在关闭应用程序!","AsystScanner/dynamicDotNetTwain2_OnPostAllTransfers");//调用者应该关闭应用程序,已添加3/3/15NetdynamicDot.CloseSource();dynamicDotNetTwain2.CloseSourceManager();System.Windows.Forms.Application.Exit();不,不!不要在这里关闭。//试试//{//关闭();//}//catch(Exceptionex)//{//MessageBox.Show(ex.Message+"Routine=dynamicDotNetTwain2_OnPostAllTransfers/Close()语句失败。[EJS1503031630]");//}返回;}catch(Exceptionex){MessageBox.显示(ex.Message+“Routine=dynamicDotNetTwain2_OnPostAllTransfers[EJS1503031631]”);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
