聊天应用程序的客户端编码错误

时间:2011-05-02 06:51:53

标签: c#

我的代码中出现错误

  

跨线程操作无效:   从线程访问控制''   它创建的线程除外   上。

我不知道为什么会这样。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

常见原因是您尝试从后台线程访问可用于UI线程的数据。确认您没有跨线程访问数据。

您需要发布更多详细信息。

答案 2 :(得分:0)

信息很清楚。跨线程调用可能会使应用程序非常不稳定,这就是它无效的原因。

以下是一些如何解决此问题的文档: