在加载表单时以及在Form关闭之前执行代码

时间:2012-05-03 00:46:56

标签: c# winforms events

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

我建议不要假设这些事件。使您的工作线程能够处理Form状态不可用或未准备好。在不知道您的具体要求的情况下,很难更具体。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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