一、错误
引发的异常:“System.InvalidOperationException”(位于 System.Windows.Forms.dll 中)
二、原因分析
由上图的错误可知,该错误是在system.windows.forms.dll中发生,奇怪的时,程序可以正常运行,只是在vs的输出窗口报了这个错,并且发现UI没有正常的更新;这时我们就要在更新UI的代码上增加异常捕获,看看能否捕获异常,如下:在更新UI的代码上,增加了异常捕获,并且弹出异常,发现,异常可以被捕获,如下:
所以这里的问题是:我们在窗口句柄没有创建的时候就更新了UI所以触发了异常,那么我们能否在创建了句柄以后再更新UI能,答案是可以的如下:
this.IsHandleCreated
这里的this是值我们要更新的控件,或者直接指的是Form类的对象都可以
三、解决问题
所以我们有两种方法解决上述问题:
1)在更新UI的地方加上异常捕获;
2)在更新UI时,先判断窗口/控件对象句柄是否已经创建
四、思考
窗口句柄是什么时候创建的?
经过实验,发现是在构造函数执行完毕以后,在Form load事件中,句柄已经创建了,然后检查了自己的代码,确实是在构造函数还没有执行完成的时候就更新了UI,所以尽可能的不要在构造函数还未执行完毕的时候就更新UI。