gpt4 book ai didi

c# - .NET TextBox 在更新时挂起

转载 作者:行者123 更新时间:2023-11-30 21:18:56 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将字符串添加到只读的多行 TextBox 中:

private void AddText(string text){
// output is a StringBuilder object
output.Insert(0, "\r\n");
output.Insert(0, text);

this.textBox1.Text = output.ToString();
}

问题是有时窗口最终只是卡在那里(即使 output 为空,并且 text 很短)。我最终不得不终止应用程序以使其再次运行。有人知道如何解决这个问题吗?

我试过使用标签来代替,但我需要它是可滚动的。

哦,我使用 .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 时,没有问题 - 文本框更新得很好。然而,当它为真时,它仍然挂起。

EDIT2:好的,我找到了解决办法。我必须在构造函数中 Show() 窗口,之前我只是在第一条消息传入时调用 Show()。

最佳答案

线程问题的典型标志。在此代码中测试 textBox1.InvokeRequired。并删除您可能拥有的对 Control.CheckForIllegalCrossThreadCalls 的任何分配。

关于c# - .NET TextBox 在更新时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com