相关疑难解决方法(0)

如何从另一个线程更新GUI上的文本框

我是C#的新手,我正在尝试创建一个简单的客户端服务器聊天应用程序.

我在我的客户端窗体上有RichTextBox,我试图从另一个类的服务器更新该控件.当我尝试这样做时,我得到错误:"跨线程操作无效:控制textBox1从其创建的线程以外的线程访问".

这里是我的Windows窗体的代码:

private Topic topic;  
public RichTextBox textbox1;  
bool check = topic.addUser(textBoxNickname.Text, ref textbox1, ref listitems);
Run Code Online (Sandbox Code Playgroud)

主题类:

public class Topic : MarshalByRefObject  
{  
    //Some code
 public  bool addUser(string user, ref RichTextBox textBox1, ref List<string> listBox1)  
 {  
     //here i am trying to update that control and where i get that exception  
     textBox1.Text += "Connected to server... \n";  
}
Run Code Online (Sandbox Code Playgroud)

那怎么办呢?如何从另一个线程更新文本框控件?


我正在尝试使用.net远程处理来创建一些基本的聊天客户端/服务器应用程序.我想将Windows窗体客户端应用程序和控制台服务器应用程序作为单独的.exe文件.这里我试图从客户端调用服务器函数AddUser,我想要AddUser函数更新我的GUI.我已经修改了代码,因为你建议使用Jon,但是现在代替了跨线程异常,我得到了这个异常... "SerializationException:Assembly中的类型主题没有被标记为可序列化".

生病了我的整个代码,尽量保持简单.
任何建议都是受欢迎的.非常感谢.

服务器:

  namespace Test
{
    [Serializable]
    public class Topic : MarshalByRefObject
    {
        public bool AddUser(string user, …
Run Code Online (Sandbox Code Playgroud)

c# user-interface multithreading winforms

10
推荐指数
2
解决办法
7万
查看次数

标签 统计

c# ×1

multithreading ×1

user-interface ×1

winforms ×1