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)

InvalidOperationException on Application.Exit

你不需要Application.Exit() exitToolStripMenuItem_Click()。调用 Application.Exit ,将关闭并释放表单,同时在 exitToolStripMenuItem_Click 恢复执行,ObjectDisposedException将被抛出。此外,当 Windows 窗体集合已被修改时,将引发System.InvalidOperationException