我正在尝试使用以下代码在只读多行文本框中预加字符串:
private void AddText(string text){
// output is a StringBuilder object
output.Insert(0, "\r\n");
output.Insert(0, text);
this.textBox1.Text = output.ToString();
}
问题是有时窗户会挂在那里(即使在
输出
是空的
文本
是短的)。我最终不得不终止应用程序才能使其再次运行。有人知道怎么避开这个吗?
我尝试使用标签,但是我需要它可以滚动。
哦,我使用.NET 2.0与另一个应用程序兼容,所以很遗憾我不能使用任何更新的功能。
事先谢谢!
编辑:
我已经更新了代码,如下所示:
private delegate void Outputter(string text);
private void Output(string text){
lock (messageLock){
string text = text.ToString();
// output is a StringBuilder instance variable
output.Insert(0, Environment.NewLine);
output.Insert(0, text);
this.textBox1.Text = output.ToString();
}
}
private void AddText(string text){
if (this.textBox1.InvokeRequired){
this.textBox1.Invoke(new Outputter(this.Output), new object[] {text});
}else{
Output(text);
}
}
当invokeRequired为false时,不会出现问题-文本框更新得很好。然而,如果它是真的,它仍然挂起。
伊迪丝2:好吧,我想出了一个办法。我必须在构造函数中显示()窗口,在我刚刚调用show()之前,当第一条消息出现时。