VisualStudio常见错误一网打尽(1)——跨线程更新UI

一、错误
在这里插入图片描述

引发的异常:“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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值