1

我这里有一个愚蠢的小问题。对于上下文,使用 C#,我在一些套接字之间进行通信,并且我想显示来自工作线程的输出。

我有这些行来显示输出:

txtOutput.AppendText("Client - Sending the following message: " + Encoding.UTF8.GetString(bytes) + Environment.NewLine);

txtOutput.Invoke(new Action(() =>  txtOutput.AppendText("Client - Server returned a message: " + str + Environment.NewLine)));

第一行是从程序的主线程添加的,第二行是从工作线程添加的。

第一行总是显示得很好,然后第二行也显示得很好。但是当我再次执行序列时,第一行 B 被粘贴到第二行 A 上,第二行 B 再次看起来正确。所以很明显第二行的 NewLine 正在消失,但我真的不明白为什么或如何解决这个问题。

4

1 回答 1

0

你能试试这个。我认为你的问题是编码。

当您发送消息时:

string message = input(textbox ex);
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encodedbytes = utf8.GetBytes(message);

并保留您的代码,因为它是在接收。

我用以下方法对此进行了测试:

public partial class Form1 : Form
{

    private Thread thread;
    private byte[] encodedBytes2;
    private byte[] encodedBytes;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        UTF8Encoding utf8 = new UTF8Encoding();
        string unicodeString = "Quick brown fox";
        encodedBytes = utf8.GetBytes(unicodeString);

        encodedBytes2 = new byte[20];
        encodedBytes2[0] = (byte)'r';
        encodedBytes2[1] = (byte)'e';


        for(int i = 0; i < 5; i++)
            textBox1.AppendText("ENCODED " + Encoding.ASCII.GetString(encodedBytes) + Environment.NewLine);

        for(int i = 0; i < 5; i++)
            textBox1.AppendText(" NOT ENCODED " + Encoding.ASCII.GetString(encodedBytes2) + Environment.NewLine);

        thread = new Thread(ThreadWork);
        thread.IsBackground = true;
        thread.Start();
    }

    private void ThreadWork()
    {

        for (int i = 0; i < 5; i++)
            textBox1.Invoke(new Action(() => textBox1.AppendText("THREAD ENCODED " + Encoding.ASCII.GetString(encodedBytes) + Environment.NewLine)));

        for (int i = 0; i < 5; i++)
            textBox1.Invoke(new Action(() => textBox1.AppendText("THREAD NOT ENCODED " + Encoding.ASCII.GetString(encodedBytes2) + Environment.NewLine)));
    }
}

输出在多行文本框中显示:

ENCODED Quick brown fox ENCODED Quick brown fox ENCODED Quick brown fox ENCODED Quick brown fox ENCODED Quick brown fox NOT ENCODED re NOT ENCODED re NOT ENCODED re NOT ENCODED re NOT ENCODED reTHREAD ENCODED Quick brown fox THREAD ENCODED Quick brown fox
THREAD
ENCODED
Quick
brown fox THREAD编码 Quick brown fox线程 ENCODED Quick brown fox 线程未编码 reTHREAD未编码 reTHREAD未编码 reTHREAD未编码 reTHREAD未编码 re




于 2013-07-26T09:32:42.673 回答