等到表单完成加载

时间:2013-09-07 17:02:37

标签: c# winforms

我是否可以使用某种布尔值来检查表单实例是否已加载,或者等到表单加载之后?

例如:

While(form_loaded == false) {
  Try {
    //do something
  }
  catch {
  }//do try catch so code won't barf
}

我一直收到以下异常:

  

System.Windows.Forms.dll中出现'System.InvalidOperationException'类型的第一次机会异常

     

System.Windows.Forms.dll中出现未处理的“System.InvalidOperationException”类型异常

     

其他信息:在创建窗口句柄之前,无法在控件上调用InvokeBeginInvoke

这就是我所担心的。

此外,如果需要更详细的解释,我可以尝试发布一些代码和/或更多输出调试信息。

3 个答案:

答案 0 :(得分:18)

尝试使用显示的事件

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Shown += new System.EventHandler(this.Form1_Shown);
    }

    private void Form1_Shown(object sender, EventArgs e)
    {

    }
}

希望这个帮助

答案 1 :(得分:7)

表单完全加载后触发的第一个事件是Shown事件。用它......


根据MSDN,事件序列为:

申请开始时:

  • Control.HandleCreated
  • Control.BindingContextChanged
  • Form.Load
  • Control.VisibleChanged
  • Form.Activated
  • Form.Shown

申请截止时:

  • Form.Closing
  • Form.FormClosing
  • Form.Closed
  • Form.FormClosed
  • Form.Deactivate

正如@Henk Holterman在答案中所述,不要在事件驱动的表格中使用忙碌的等待......

答案 2 :(得分:5)

您可以选择LoadedShown个活动。

Windows是事件驱动的,所以永远不要等待循环中的某些事情。