0

我目前正在开发一个使用 Windows 窗体 GUI 的应用程序。应用程序的主要工作将在另一个线程上执行 - 但它可能取决于表单的状态。
因此,在创建线程之前,我必须确保表单已完全加载。另外,我需要确保线程在表单开始关闭之前终止。

此问题的可能解决方案可能是覆盖OnShownOnFormClosing方法。只有在加载了表单的所有资产后才真正调用
该方法吗?OnShowOnFormClosing-我可以确定在此方法中执行的任何代码都将在表单开始关闭/处置之前执行吗?

4

3 回答 3

2

Windows 窗体事件可能很棘手,并且它们触发的顺序不可靠。例如,'Shown' 事件仅在 Form 首次显示时触发一次,但就在昨天,我找到了一种通过在正确的时间操作 Form.Visible 标志来完全防止该事件触发的方法。

因此,您需要非常具体地了解您的需求。例如 - 当你说“完全加载”时,你是什么意思?控件已创建,表单可见,表单构造函数已执行完毕?

同样,FormClosing 事件可能会被主 aUI 线程中的未处理异常所规避,这会导致在没有触发事件的情况下删除 Form。

我建议永远不要对这些事件做出任何假设。使您的工作线程能够处理表单状态不可用或未准备好。在不知道您的确切要求的情况下,很难更具体。

于 2012-05-03T00:53:04.140 回答
2

我建议您阅读 MSDN 上发布的 WinForms 事件排序:

http://msdn.microsoft.com/en-us/library/86faxx0d.aspx

于 2012-05-03T00:53:07.927 回答
0

您是否尝试过在主 WinForm 的构造函数上使用 InitializeComponent 并使用OnLoad(在加载所有内容时调用)?

于 2012-05-06T17:06:18.113 回答