使用“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,但会给你的估计客户带来未知结果