InvalidOperationException on Application.Exit
本文关键字:Exit Application on InvalidOperationException | 更新日期: 2023-09-27 18:27:35
有人能告诉我为什么exitToolStripMenuItem_Click抛出 InvalidOperationException。我知道这是由于插件而发生的。正在调用的 close((。但是,我不明白为什么。通过"X"按钮关闭 Form1 不会触发异常。调用 Application.Exit(( 确实如此。下面是演示我的主应用程序中发生的情况的示例。在我的主应用程序中,事件在某些表单关闭时触发,因此我需要确保在每个表单上调用 Close。我可以将Application.Exit((更改为Close((,但是在阅读MSDN后,我觉得这不是正确的解决方案。任何想法都会有所帮助,谢谢。
注意:我正在开发的主要应用程序是多线程的。
public partial class Form1 : Form
{
Form plugin = new Form();
public Form1()
{
InitializeComponent();
plugin.Show();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
plugin.Close();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
引发的异常是:
Exception thrown: 'System.InvalidOperationException' in mscorlib.dll
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
at System.Windows.Forms.Application.ExitInternal()
at System.Windows.Forms.Application.Exit(CancelEventArgs e)
at System.Windows.Forms.Application.Exit()
at WindowsFormsApplication2.Form1.exitToolStripMenuItem_Click(Object sender, EventArgs e)
你不需要Application.Exit()
exitToolStripMenuItem_Click()
。调用 Application.Exit
,将关闭并释放表单,同时在 exitToolStripMenuItem_Click
恢复执行,ObjectDisposedException
将被抛出。此外,当 Windows 窗体集合已被修改时,将引发System.InvalidOperationException
。