2013-03-20 163 views
3

我有一个从串口接收数据的类。我使用action<T> delegate将数据传递到显示在文本框中的表单中。事情是我无法访问控制,因为它说:Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on使用“Control.CheckForIllegalCrossThreadCalls = false”是个好主意

所以我设置Control.CheckForIllegalCrossThreadCalls = false,它工作。

这样做是个好主意吗?或者有更好的方法来做到这一点。

谢谢

回答

2

虽然它似乎大部分时间工作,它肯定会不时失败。

如果您需要从另一个线程访问/修改UI控件,请使用Control.Invoke

+0

是的,那很好.. – Liban 2013-03-21 03:07:28

+0

Control.Invoke可能有处理泄漏。相反,最好使用Control.BeginInvoke。 – 2017-02-08 11:26:09

1

不是一个好主意。

我相信首选的方法是检查是否Control.InvokeRequired == true,如果是,则使用Control.Invoke与适当的委托,这将调用方法调用到UI线程。

5

不,它不是。一个好主意应该是把你的错误放到谷歌搜索中。如果您点击了第一个链接,您会在SO上找到一个post来解释它。这样,你只能制作另一个副本。

+0

其实我见过它..但一个解决方案为我工作,我没有看别人..我想我错了,我应该读所有的讨论。谢谢 – Liban 2013-03-20 06:47:17

1

你会写类似下面

 try 
     { 
      Object obj=null; 
      var result = obj.ToString(); 
     } 
     catch (Exception) 
     { 


     } 

我相信你的答案是NO ,类似的事情是Control.CheckForIllegalCrossThreadCalls = false时,它只会吃例外,但目前未知的结果,以您的预计客户

相关问题