我这里有一个愚蠢的小问题。对于上下文,使用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正在消失,但我真的不明白为什么或如何解决这个问题。
答案 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
编码快速棕色狐狸
编码快速棕色狐狸
编码快速棕色狐狸
编码快速棕色狐狸
未编入,未编入,未编入,未编入,未编入,请参阅编码快速棕色狐狸
螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
螺纹编码快速棕色狐狸
未编入的线程未经编码,请参阅未编码,请参阅未编码,请参阅未编入的编辑