Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从方法写入文本框_C#_Multithreading_Winforms - Fatal编程技术网

C# 无法从方法写入文本框

C# 无法从方法写入文本框,c#,multithreading,winforms,C#,Multithreading,Winforms,我正在尝试创建从客户端到服务器的消息传递应用程序。当服务器向客户端发送消息时,它将打开一个新表单,并将文本添加到表单内的文本框中 然而,客户机正在挑战性地恢复消息,在尝试更新文本框之前,我使用显示消息的消息框对此进行了测试。文本框完美地显示了消息 然而,当我试图编辑textboxt时,什么都没有发生。然而,我的另一种方法是点击按钮,效果很好。真的不确定为什么会发生这种情况 我还编写了一个invoke方法来检查是否需要调用textbox,因为我正在为某些方法使用不同的线程 下面是我的代码示例和一些

我正在尝试创建从客户端到服务器的消息传递应用程序。当服务器向客户端发送消息时,它将打开一个新表单,并将文本添加到表单内的文本框中

然而,客户机正在挑战性地恢复消息,在尝试更新文本框之前,我使用显示消息的消息框对此进行了测试。文本框完美地显示了消息

然而,当我试图编辑textboxt时,什么都没有发生。然而,我的另一种方法是点击按钮,效果很好。真的不确定为什么会发生这种情况

我还编写了一个invoke方法来检查是否需要调用textbox,因为我正在为某些方法使用不同的线程

下面是我的代码示例和一些截图,下面的方法是从另一个表单“MAIN”打开的,我在代码中引用了它。不确定这是否会引起问题

public ChatWindow()
    {
        InitializeComponent();
        Thread timerThread = new Thread(Main.ReceiveLoop);
        timerThread.Start();
    }


    private void txtChatLog_TextChanged(object sender, EventArgs e)
    {

    }

    private void btnSendMessage_Click(object sender, EventArgs e)
    {

        string clientReply = txtReply.Text;
        string Message = "ClientMsg§" + clientReply;
        var time = DateTime.Now;
        txtChatWindow.AppendText($"{time} client: {clientReply}");
        txtChatWindow.AppendText(Environment.NewLine);
        Main main = new Main();
        main.ChatResponse(Message);
        txtReply.Text = "";

    }

    delegate void setTextCallBack(string message);

    public void UpdateChatLog(string message)
    {
        if (txtChatWindow.InvokeRequired)
        {
            setTextCallBack d = new setTextCallBack(UpdateChatLog);
            this.Invoke(d, new object[] { message });
        }
        else
        {
            var time = DateTime.Now;
            string newMessage = message.Split('$')[1];
            string messageToDisplay = $"{time} Server: {newMessage}";
            MessageBox.Show(messageToDisplay);
            this.txtChatWindow.AppendText(messageToDisplay);
            this.txtChatWindow.AppendText(Environment.NewLine);

        }
    }
下面是我的服务器和客户端上运行的代码的一些图像:

正如您所看到的,服务器正在接收客户机回复的内容,当客户机按下SEND按钮时,文本框也被追加。但是,当调用该方法时,它不会被更改。您知道正在调用该方法,因为正在调用MessageBox.Show并显示文本框中应该显示的内容

真的不确定这里有什么问题。如果有人能帮助我,我将不胜感激!这是一个项目,我的大学学位,即将到期


提前谢谢你

Main Main=newmain()?你从来没有显示过这个表格。我怀疑你不想在这里创建一个新的main。@LarsTech我只是想使用表单中的方法,这部分工作正常,这就是回复服务器的方法。是UpdateCatlog方法当前不起作用。我没有看到任何调用UpdateCatlog的代码。@LarsTech调用它的代码是以主窗体的形式出现的,查看该代码并不重要,您知道它正在被调用,因为messagebox正在屏幕上显示。