2016-01-06 59 views
0

所以我已經使用了一段時間了。將tcpstream輸入粘貼到文本框中

達到流的末尾程序凍結,直到有新的輸入只能再次凍結。

使用線程我得到了我無法從該線程訪問文本框的異常。背景工作者只是沒有做任何事情。

我真的有點丟在這裏

我的代碼有點看起來像在管理的TCP流的類此

: 串readMessage(){ 回報 inputStream.ReadLine() }

在我的窗體窗體類我需要以某種方式不斷凍結UI用輸入流更新文本框

+0

沒有人能夠幫助你,因爲我們不知道你在說什麼。向我們展示一些代碼,描述您正在嘗試執行的操作,提出一個問題...... – pm100

+0

假設您使用WinForms,如果要更改其他線程的UI組件狀態,則需要使用Invoke(Delegate方法)而不是創建UI組件的線程。你可以使用InvokeRequired來檢查你是否需要使用Invoke() – Yoztastic

+0

這該死的格式化刪除了我的代碼 – user3717941

回答

0
public string readMessage() 
    { 
     string message; 
     message = inputStream.ReadLine(); 
     return message; 
    } 

這就是我在主窗體類處理TCP流

現在看起來是這樣的:

void Refresh(object sender, EventArgs e) 
    { 
     Thread.Sleep(1000); 
     n+=1; 
     label1.Text = Convert.ToString(n); 
    } 

    public void update() 
    { 
     Channel.AppendText(irc.readMessage()); 
    } 
    void WORK() 
    { 
     while(true) 
     { 
      Channel.Invoke(new MethodInvoker(() => update())); 
     } 
    } 

工作是由線程調用的方法,同時刷新是由一種叫做方法定時器週期性地設置主線程休息,所以另一個線程可以做它的工作

它讓它運行...直到它到達當前流的結尾並再次凍結,直到有一個新的輸入它快速寫入文本框並再次凍結,這正是我不想要的。

編輯:我設法讓它與tcp.SenderTimeout一起工作,將超時設置爲幾個毫秒,並且只更新一次聊天,但仍然感覺真的沒有響應。 有沒有辦法讓它在後臺運行更平滑?因爲Ill還必須在運行時工作並響應輸入。

相關問題