4

我有一个从串口接收数据的类。我曾经action<T> delegate将数据传递给在文本框中显示的表单。问题是我无法访问textbox控件,因为它说:Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on

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

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

谢谢

4

3 回答 3

4

虽然它可能看起来在大多数情况下都有效,但它肯定会时不时地失败。

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

于 2013-03-20T05:37:31.917 回答
1

这样做不是一个好主意。

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

于 2013-03-20T05:31:42.777 回答
1

你会写像下面这样的东西吗

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


        }

我相信你的答案是NO,类似的事情是 Control.CheckForIllegalCrossThreadCalls = false,它只会吃异常,但会给你估计的客户带来未知的结果

于 2013-03-20T05:45:45.320 回答