我有一个BackgroundWorker
发布消息的线程,BeginInvoke
在 GUI 的文本框中使用。write_debug_text
在文本框中显示文本的方法使用AppendText
并将文本写入Console
.
外观是BackgroundWorker
写得太快write_debug_text
,跟不上。我设置了一个断点,write_debug_text
并且必须等待很长时间才能被击中。许多对“BeginInvoke”的调用发生在断点被命中之前。
我正在寻找 UI 上消息的实时显示,就像System.Console
在 VS C# Express IDE 中一样。
通过搜索 SO,我了解到这AppendText
是使用更快的方法,并且可能必须重新分配字符串。
一些回复建议使用StringBuilder
然后定期将该文本写入文本框。但这需要添加更多的事件和计时器;我宁愿不这样做(我的简单应用程序变得越来越复杂)。
我怎样才能实时写入文本框(并让它显示)?
我目前的想法是创建一个继承自 Textbox 的小部件,该小部件使用文本队列和计时器。
编辑 1:示例代码
这是我的代码片段:
private m_textbox;
//...
m_textbox.BeginInvoke(new write_debug_text_callback(this.write_debug_text),
new object[] { debug_text });
return;
private void write_debug_text(string text)
{
string time_stamp_text = "";
time_stamp_text = DateTime.Now.ToString() + " ";
time_stamp_text += text;
m_textbox.AppendText(time_stamp_text);
m_textbox.Update();
System.Console.Write(time_stamp_text);
return;
}
我已尝试更改BeginInvoke
为Invoke
,但我的应用程序已挂起。当我使用调试器暂停/中断时,执行指针位于对Invoke
.
顺便说一句,我在 Java、C++ 和 C 方面有多年的经验。我在 C# 的第 5 个月。