2011-05-02 87 views
1

我得到一个错误客户端编码错误在我的代码聊天应用

跨线程操作无效: 控制“”从一个线程 比它是在创建 线程访问等。

我不知道它为什么会发生。谁可以给我解释一下这个?

+2

怎么能解释错误没有看到你的代码? – Oded 2011-05-02 06:54:07

回答

0

常见的原因是,如果您尝试从后台线程访问可用于UI线程的数据。验证您是否不通过线程访问数据。

您需要刊登更多信息。

2

这是因为您正从另一个线程访问Windows窗体应用程序中的控件而引发的。

你能分享你的代码吗?

假设您正在访问的TextBox(这名字是textBox1):

textBox1.Text = "Modified text" 

而是这样做的,你必须做到:

MethodInvoker m =() => { textBox1.Text = "Modified text"; }; 
if (InvokeRequired) { 
    BeginInvoke(m); 
} 
else { 
    m.Invoke(); 
} 

当然,这是一个简单的例。你可以在方法中封装Invoking部分,所以你不会一遍又一遍地重复相同的代码。喜欢的东西:

public void InvokeSafe(MethodInvoker m) { 
    if (InvokeRequired) { 
     BeginInvoke(m); 
    } 
    else { 
     m.Invoke(); 
    } 
} 

因此,所有你要做的是:

MethodInvoker m =() => { textBox1.Text = "Modified text"; }; 
InvokeSafe(m);