这个问题已经在这里有一个答案:
- 它是安全只是CheckForIllegalCrossThreadCalls设置为false,在调试过程中,以避免交叉线程错误? 1个回答
我有一个从接收的serialport数据的类。 我用action<T> delegate
将数据传递到其被显示在文本框的形式。 事情是我无法访问textbox
控件,becouse它说: Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on
。
所以我设置Control.CheckForIllegalCrossThreadCalls = false
,而且这是工作。
是不是好主意,这样做呢? 或有这样做的更好的方法。
谢谢
虽然它可能会出现工作的大部分时间,这是肯定现在再失败每一个。
如果您需要访问/修改从另一个线程的UI控件,使用Control.Invoke 。
不,这不对。 一个好的想法已经把你的错误变成了谷歌搜索。 如果你点击了第一个链接,你会发现一个帖子在这里,这样解释它。 这样,你只生产了另一种重复。
这不是一个好主意,这样做。
我相信,首选的方法是检查是否Control.InvokeRequired == TRUE,如果是这样,然后使用Control.Invoke用适当的代表,这将马歇尔的方法调用到UI线程。
你会写类似下面
try
{
Object obj=null;
var result = obj.ToString();
}
catch (Exception )
{
}
我相信,你的答案是否定的,类似的事情是Control.CheckForIllegalCrossThreadCalls = false时,它只会吃例外,但目前未知的结果,以您的预计客户
文章来源: Is it good idea to use “Control.CheckForIllegalCrossThreadCalls = false” [duplicate]