C# 另类跨线程访问控件异常

2019-07-25  本文已影响0人  AnuoF

C# 另类跨线程操作控件异常

今天写了一小程序,但是却遇到了一个奇怪的问题,我在窗体点击按钮,然后往RichTextbox控件添加文本内容,有时会抛出从不是创建它的线程访问RichTextbox控件,诡异的地方有两处:

而且这个异常也不是必现,有时有,有时没有,这就真让人头大了。

找啊找,找问题,最后确定是在窗体的构造函数里出了问题。因为我在构造函数中调用了另一个对象的初始化方法,并注册了它的一个事件。问题的关键就在于这个回调事件,如果事件在窗体构造函数执行完成之后再触发的,那程序正常;如果窗体构造函数还未执行完成,异步回调事件先触发了,那么,不好意思,程序必然会出现上述异常。这就可以解释上述的两个疑点了。

那么,为什么呢????

原因还是在于这个异步回调事件,因为我在异步回调的事件中访问了可能会抛异常的RichTextbox控件,来显示一些信息日志,这就导致有可能不是主线程来创建这个控件(大概就是这个意思)。

所以,修改下程序,将在构造函数中注册事件、调用初始化方法等操作,放到窗体的_Load事件中去,完事儿,一切正常。

上一篇 下一篇

猜你喜欢

热点阅读