等到表单完成加载

Ben*_*Yeo 4 c# winforms

是否有某种布尔值我可以用来检查表单的实例是否被加载,或者等到表单加载?

例如:

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

我一直得到以下异常:

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

System.Windows.Forms.dll中发生了未处理的"System.InvalidOperationException"类型异常

附加信息:Invoke或者BeginInvoke在创建窗口句柄之前无法在控件上调用.

这就是我所担心的.

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

BRA*_*mel 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)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

希望这个帮助

  • 通常,应该在设计器中订阅/委托事件. (3认同)

Avi*_*ner 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在他的回答中所说,不要在事件驱动的形式中使用忙碌的等待......


Hen*_*man 5

你有一个Loaded和一个Shown事件可供选择.

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