【问题标题】:C# winfrom What happens to the UI control resource when I open a new modal window with showdialog and close it?C# winform 当我使用 showdialog 打开一个新的模式窗口并关闭它时,UI 控件资源会发生什么?
【发布时间】: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 对象并打开和关闭它。我应该使用显示和隐藏吗?

标签: c# winforms


【解决方案1】:

您可以创建自己的从ApplicationContext 派生的类。在那里,您可以拥有任意数量的表单,添加和删除表单等。当表单关闭时,它的表单计数会减少 - 当为 0 时,请致电 ExitThread();。在 program.cs 中,不要调用 Application.Run(new YourForm());,而是传递自定义上下文的实例。

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多