在多线程操作界面控件的时候,需要用Invoke 或 BeginInvoke,但是有时候会出现"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke",分析可能的原因是代码执行速度过快,在执行完"InitializeComponent()"之前就执行到了其他代码对界面进行了一些操作导致这个错误,现在发现一个巧妙的解决办法,就是在Invoke 或 BeginInvoke方然之前添加下面代码:

IntPtr i = this.Handle;

     代码就是在执行Invoke 或 BeginInvoke之前先获取句柄,如果获取不到,则下面的代码不会执行,实测可以解决问题!

最后修改:2020 年 08 月 25 日
如果觉得我的文章对你有用,请随意赞赏