我目前正在尝试从客户端到服务器创建消息传递应用程序。当服务器向客户端发送消息时,它将打开一个新表单并将文本添加到表单内的文本框中。
然而,客户端正在挑衅地恢复消息,我在尝试更新文本框之前使用显示消息的消息框对此进行了测试。文本框正在显示消息。
但是,当我尝试编辑文本文本时,没有任何反应。但是,按下单击按钮的其他方法可以很好地工作。真的不确定为什么会这样。
我还编写了一个invoke方法来检查是否需要调用文本框,因为我在某些方法中使用了不同的线程。
下面是我的代码示例,其中包含一些屏幕截图,下面的方法是从另一种形式“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并显示文本框中应包含的内容。
真的不确定这里的问题是什么。如果有人能帮助我,我将非常感激!这是我即将到期的大学学位项目!
提前谢谢!