Invoke之后新行消失

时间:2013-07-25 10:16:27

标签: c# newline invoke

我这里有一个愚蠢的小问题。对于上下文,使用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正在消失,但我真的不明白为什么或如何解决这个问题。

1 个答案:

答案 0 :(得分: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
编码快速棕色狐狸
编码快速棕色狐狸
编码快速棕色狐狸
编码快速棕色狐狸
 未编入,未编入,未编入,未编入,未编入,请参阅编码快速棕色狐狸 螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
未编入的线程未经编码,请参阅未编码,请参阅未编码,请参阅未编入的编辑