繁体   English   中英

Application.Exit上的InvalidOperationException

[英]InvalidOperationException on Application.Exit

有人可以告诉我为什么exitToolStripMenuItem_Click引发InvalidOperationException。 我知道这是由于plugin.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)

您在exitToolStripMenuItem_Click()不需要Application.Exit() exitToolStripMenuItem_Click() 调用Application.Exit ,将关闭并处理该表单,同时在exitToolStripMenuItem_Click处恢复执行,将引发ObjectDisposedException 此外,由于Windows窗体集合已被修改,将引发System.InvalidOperationException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM