我有一个从serialport接收数据的类。我使用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,它正在工作。
这样做是个好主意吗?或者有一种更好的方法。
谢谢
发布于 2013-03-20 13:37:32
虽然它看起来在大多数情况下是有效的,但它肯定会时不时地失败。
如果需要从另一个线程访问/修改UI控件,请使用Control.Invoke。
发布于 2013-03-20 13:31:43
这样做可不是个好主意。
我认为首选的方法是检查Control.InvokeRequired ==是否为真,如果是,则使用带有适当委托的Control.Invoke,这会将方法调用编组到UI线程上。
发布于 2013-03-20 13:45:45
你会写像下面这样的东西吗?
try
{
Object obj=null;
var result = obj.ToString();
}
catch (Exception )
{
}我肯定你的答案是NO,类似的情况是Control.CheckForIllegalCrossThreadCalls = false,它将只吃异常,但会将未知的结果呈现给你估计的客户
https://stackoverflow.com/questions/15516014
复制相似问题