无法从方法

时间:2018-04-23 14:20:25

标签: c# multithreading winforms

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

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

但是,当我尝试编辑文本文本时,没有任何反应。但是,按下单击按钮的其他方法可以很好地工作。真的不确定为什么会这样。

我还编写了一个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);

        }
    }

以下是我的服务器的一些图像以及客户端上运行的代码: Image of what is happening On screen

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

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

提前谢谢!

0 个答案:

没有答案