【发布时间】:2020-06-28 02:21:21
【问题描述】:
如果我用 ShowDialog() 打开一个新的模态窗体并关闭它,资源没有释放,它还在吗?
我在关闭模态表单后访问模态表单的ListBox 时遇到了跨线程问题。listbox.items.add 可以正常工作,但只有在使用listbox.items.clear 时才会出现上述问题。
【问题讨论】:
-
能否提供相关代码?你不会忘记输入
Invoke吗? -
当您
ShowDialog()一个新的 Form 实例时,请使用using语句 (using (myForm f = new myForm() { [...] f.ShowDialog(); var someValue = f.SomePublicProperty [...] })。您创建的非托管资源(例如 Graphics 对象)需要显式处理。不清楚您如何访问 ListBox,因为控件通常是private(有很好的理由)。也不清楚这里是如何涉及线程的。您需要发布所有可以描述您的上下文和操作的详细信息。 -
@DmitryBychenko Link to test code Git repository 使用了调用。抛出异常的顺序。 1. 单击 Form 按钮进入 Form2 Showdialog。 2.单击关闭按钮关闭Form2 3.几秒钟后,单击Form1的按钮导致跨线程异常。我想保留创建的 Form2 对象并打开和关闭它。我应该使用显示和隐藏吗?