【问题标题】:ShowDialog in .Net.Net 中的 ShowDialog
【发布时间】:2012-07-26 21:42:30
【问题描述】:

我知道您应该始终在模态表单上调用 dispose。不过,我有一个相关的问题。

如果我的应用程序中有一个方法,例如

Private Sub tempMethod

Dim expForm as new ExplorerForm(tempDataTable)
expForm.ShowDialog

'Should I call dispose here?
'or would the form be automatically disposed when it goes out of scope
'after this method exits?

End Sub

【问题讨论】:

  • "但是,如果您使用 form1.ShowDialog() 以模态方式显示表单,则该表单将不会被释放,您需要自己调用 form1.Dispose()。我相信这是您唯一需要担心自己处理表单的时候。” stackoverflow.com/a/3097383/284240
  • @TimSchmelter - 这个问题回答了这个问题,但不是重复的,所以这不太可能作为一个骗局被关闭......我会说你应该把它作为答案而不是发布一条评论。你会得到我的投票。
  • @TimSchmelter - 我认为这不能回答 OP 问题。 OP 知道应该手动调用 Dispose,OP 只是想知道如果表单在方法结束时超出范围,是否会发生这种情况。
  • @ChrisDunaway:我首先评论了它,因为我不确定它是否会回答甚至可以提供帮助,但它肯定是相关的。然后我回答了该评论(+ using-statement 提示你)并获得 2 票反对。所以现在我保留它作为评论,它可能会在未来帮助某人;)

标签: vb.net


【解决方案1】:

当表单超出范围时,它会在将来的某个时间被垃圾回收,然后调用 Dispose,但在这种情况下最好使用 Using 关键字:

Private Sub tempMethod
    Using expForm As New ExplorerForm(tempDataTable)
        expForm.ShowDialog()

        'Other code here
    End Using      'Form disposed here
End Sub

【讨论】:

  • 很高兴您澄清 GC 最终会清理它。我也在代码中确认了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
相关资源
最近更新 更多