8

是否有某种布尔值可用于检查表单实例是否已加载,或者等到表单加载完毕?

例如:

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”类型的未处理异常

附加信息:Invoke或者BeginInvoke在创建窗口句柄之前不能在控件上调用。

这就是我所担心的。

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

4

3 回答 3

23

尝试使用显示的事件是这样的

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

    private void Form1_Shown(object sender, EventArgs e)
    {

    }
}

希望这有帮助

于 2013-09-07T17:09:28.067 回答
8

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


根据MSDN,事件顺序是:

应用程序启动时:

  • Control.HandleCreated
  • Control.BindingContextChanged
  • 表单加载
  • Control.VisibleChanged
  • 表单.激活
  • 表格显示

当应用程序关闭时:

  • 表格.关闭
  • Form.FormClosing
  • 表格关闭
  • Form.FormClosed
  • Form.Deactivate

正如@Henk Holterman 在他的回答中所说,不要在事件驱动的形式中使用忙等待......

于 2013-09-08T05:02:35.873 回答
6

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

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

于 2013-09-07T17:05:28.437 回答