【问题标题】:Windows Form causes ObjectDisposedException when closingWindows 窗体关闭时导致 ObjectDisposedException
【发布时间】:2015-05-18 17:30:16
【问题描述】:

所以我大多是 C# 新手,但我之前用它创建过表单。 我已经搜索了一个多小时试图找到答案,但我发现的所有内容要么难以理解,要么措辞我不理解,要么看起来不相关。

最相关的结果似乎是这些:

ObjectDisposedException when .Show()'ing a form that shouldn't be disposed

Exception when closing Form (thread + invoke)

我还是不明白。

我正在做的是:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 Form = new Form1();
Application.Run(Form);
Form.Show(); // Visual Studio highlights this line.
Form.UserData.Rows.Add(new string[] { "TestName", "1337" }); // I'm trying to get used to DataGridViews.
Form.UserData.Rows.Add(new string[] { "AnotherName", "9015" });

关闭项目中唯一的表单时,我看不到我在做什么需要它。

【问题讨论】:

  • Application.Run 在您关闭传递给它的表单之前不会返回,因此当您调用 Show 时,变量 Form 不再有效。顺便说一句,您选择命名变量 Form 非常令人困惑
  • 哦,非常感谢!对不起变量名,我痴迷于将每个单词的第一个字母大写(没有下划线),而且我对变量命名毫无创意。
  • 只是一个建议,您可以选择任何您喜欢的名称或命名约定,但避免使用与框架类相同的名称来命名变量。
  • 我非常缺乏原创性和创造性,我经常在变量前加上下划线,因为我有一个同名的现有变量。我的强迫症遇到了矛盾,因为我不能把它命名为有创意的东西,我不想把它命名为我已经拥有的东西,我不能把它命名为不符合我风格的东西。不过我会努力的。

标签: c# winforms objectdisposedexception


【解决方案1】:

我是唯一一个注意到变量的名称是 Form 的人,它也是 Form1 肯定派生自的 Class Form 的名称?

尽量记住使用小写来命名局部变量,可能一切都会变得更好。

Form1 frm = new Form1();

Application.Run(frm);

上面的代码应该可以,如果你运行一个表单,默认情况下会显示。

【讨论】:

  • 虽然我同意你的命名选择,但这不是问题。 ObjectDisposed 异常是在退出 Application.Run 调用后使用变量 Form 触发的。如果您阅读有关 Application.Run 的文档,您会注意到The Dispose method of the Form class will be called prior to the return of this method 的注释。
  • 我同意史蒂夫,你是对的,也许我必须清楚地提到 Application.Run 之后的代码必须被删除,因为表单将由 Run 本身显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多