English 中文(简体)
WinForms Dialog Form——近距离或处置?
原标题:WinForms Dialog Form -- Close or Dispose?
  • 时间:2011-11-10 15:19:13
  •  标签:
  • winforms

我继承了某些法典,希望由大家来作这一修改,我的关切是记忆管理。

让我们说,我有一个“基地”表格,有一套开放的“方言”。 打开方言表的建议模式是什么? 目前,我们显示这样的“方言”形式(在“基地”形式代码中,在纽扣时):

ChangePasswordForm frm = new ChangePasswordForm();
frm.ShowDialog();

Then close it like so (in the "dialog" form code):

private void bCancel_Click(object sender, EventArgs e)
{
  this.Close();
  //this.Dispose();  <-- this is what I am considering adding.
}

我增加反对意见的理由是,如果这种表格被显示,我感到担忧,并且多次关闭,每次制作“new> 表格,其资源永远不会真正释放——这是正确的吗? 而且,如果表格中的“集装箱”X在顶端,我是否在形式封闭活动中发出反对吗?

提前感谢。

最佳回答

我将使用<条码>,使用:

  using (var frm = new ChangePasswordForm()) {
      frm.ShowDialog();
  }

Combine this with a DialogResult:

private void bCancel_Click(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Cancel;
}

Setting the DialogResult, will close the Dialog, and the caller/owner has some feedback.

And you don t have to worry about Close or Dispose.

问题回答

According to MSDN you need to dispose under two conditions:

表格没有在近距离处置的两种条件是:(1)它是多文件接口应用的一部分,形式不明显;(2) 您使用显示器展示了表格。 在这些情况下,你将需要用人工处理,以标明对垃圾收集的所有形式控制。

MSDN Form.Close

采用声明的方式申报表格是处理这一问题的适当方式。

        using (ChangePasswordForm frm = new ChangePasswordForm())
        {
            frm.ShowDialog();
        }




相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签