2013-07-25 43 views
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正在消失,但我不明白爲什麼或者如何解決這個問題。

+0

嘗試先創建一個字符串變量,然後追加字符串,仍然是同樣的問題? – butterbox

+0

不幸的是,這沒有什麼區別! – David

+0

我正在測試,而且它沒有字節。因此,「字節」編碼的東西把這個upp搞砸了。 – butterbox

回答

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))); 
    } 
} 

和輸出原來這個多行文本框:

編碼敏捷的棕色狐狸
編碼敏捷的棕色狐狸
編碼快速的棕色狐狸
編碼快速棕色狐狸
編碼快速棕色狐狸
未編碼不是ENC俄德再未進行編碼再未進行編碼再未進行編碼再穿入編碼敏捷的棕色狐狸 線程編碼敏捷的棕色狐狸
線程編碼敏捷的棕色狐狸
線程編碼敏捷的棕色狐狸
線程編碼敏捷的棕色狐狸
的線未編碼再穿入不進行編碼重新編碼未編碼重新編碼未編碼重新編碼