2013-05-19 152 views
0

我有下面的代碼:如何時間可持續更新C#中的文本框

class NotepadCloneNoMenu : Form 
{ 
    protected TextBox txtbox; 

    public NotepadCloneNoMenu(string a) 
    { 

     Text = "Notepad Clone No Menu"; 

     txtbox = new TextBox(); 
     txtbox.Parent = this; 
     txtbox.Dock = DockStyle.Fill; 
     txtbox.BorderStyle = BorderStyle.None; 
     txtbox.Multiline = true; 
     txtbox.ScrollBars = ScrollBars.Both; 
     txtbox.AcceptsTab = true; 
     txtbox.AppendText(a); 
     txtbox.AppendText("\n");   
    } 
} 

class program1 
{ 

    public static void Main() 
    { 

     string result = "abc"; 

     while(true) 
     { 
      Application.Run(new NotepadCloneNoMenu(result)); 
    } 
} 
} 

我想字符串結果不斷地追加到文本框,所以它看起來是這樣的:

ABC ABC abc

等等等等。然而,每次我打電話給:

Application.Run(new NotepadCloneNoMenu(result)); 

它會重置文本框。無論如何,我可以不斷更新文本框?我對C#相當陌生,所以這對我來說非常混亂。

感謝, 福範

+1

從更簡單的事情開始,比如下面的關於製作WinForm應用程序的教程。這是WPF或控制檯應用程序,因爲您的代碼聲明是WinForms。看看你的代碼 - 你不會讀,就好像你試圖運行一堆具有相同的根形式的應用程序?並不是說你應該這樣做。 –

回答

0

首先,你不斷地關閉和打開的應用程序。這就是重置的原因。如果你想運行一個無限循環,你可能想在你的應用程序內部運行它。

在您的應用程序代碼中,使用一些事件(也許一個計時器將適合您)將文本追加到文本框。就像這樣:

public someEventOnTheForm (object sender, EventArgs e) 
{ 
    txtBox.Text += "Notepad Clone to Menu"; 
} 

有兩兩件事需要考慮:第一,如果你沒有一個回採條件,這將只是保持,直到你用完了它的填充內存。

其次,Windows窗體默認只在一個線程上運行。您將使用該線程更新文本框,因此在附加文本時,表單本身將無法使用。如果賽事開始時間過長,它可能會在比賽期間消失。如果您希望表單可用,則需要第二個線程來處理事件。

+0

感謝雷南的回答。此表單正在等待調試FX3(我使用的USB控制器)發送的消息。這就是爲什麼它沒有停止條件。另外,一個線程是否足夠,因爲所有的程序都會發布它從FX3接收到的消息呢? – user2278277

+0

你應該在你的問題中包含這些信息。如果您在幾秒鐘內每隔一段時間收到來自調試器的消息,它可能是可行的,是的。只要這些信息不是太快就可以閱讀。此外,我會使用控制檯應用程序。 – Renan

+0

我已經有控制檯應用程序的作品。但是,我的小組希望我使用這些表單,因爲它看起來更好。無論如何,我可以繼續將新收到的郵件追加到我的文本框? – user2278277

相關問題