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