使用“Control.CheckForIllegalCrossThreadCalls = false”是不错的主意
我有一个从serialport接收数据的类。 我使用action delegate
将数据传递到文本框中显示的表单。 事情是我无法访问textbox
控件,因为它说: Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on
。
所以我设置Control.CheckForIllegalCrossThreadCalls = false
,它正在工作。
这样做是个好主意吗? 或者有更好的方法。
谢谢
虽然它似乎在大多数时间都可以工作,但它肯定会偶尔失败。
如果需要从另一个线程访问/修改UI控件,请使用Control.Invoke 。
不,这不对。 一个好主意是将您的错误放入谷歌搜索。 如果您点击了第一个链接,那么您可以在此处找到解释它的post 。 这样,您只生成了另一个副本。
这样做并不是一个好主意。
我相信首选方法是检查Control.InvokeRequired ==是否为true,如果是,则使用Control.Invoke和正确的委托,这将把方法调用编组到UI线程上。
你会写下面的东西吗?
try { Object obj=null; var result = obj.ToString(); } catch (Exception ) { }
我相信你的答案是否定的 ,类似的事情是Control.CheckForIllegalCrossThreadCalls = false,它只会吃exception,但会给你的估计客户带来未知结果