它是用好主意“Control.CheckForIllegalCrossThreadCalls =假”

2019-07-22 02:03发布

这个问题已经在这里有一个答案:

  • 它是安全只是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 ,而且这是工作。

是不是好主意,这样做呢? 或有这样做的更好的方法。

谢谢

Answer 1:

虽然它可能会出现工作的大部分时间,这是肯定现在再失败每一个。

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



Answer 2:

不,这不对。 一个好的想法已经把你的错误变成了谷歌搜索。 如果你点击了第一个链接,你会发现一个帖子在这里,这样解释它。 这样,你只生产了另一种重复。



Answer 3:

这不是一个好主意,这样做。

我相信,首选的方法是检查是否Control.InvokeRequired == TRUE,如果是这样,然后使用Control.Invoke用适当的代表,这将马歇尔的方法调用到UI线程。



Answer 4:

你会写类似下面

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


        }

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



文章来源: Is it good idea to use “Control.CheckForIllegalCrossThreadCalls = false” [duplicate]