2011-03-17 50 views
0

在我的程序中,我将文本追加到文本框,然后我的程序在文本框完成呈现之前继续前进。这对用户来说是不好的业力。如何等待文本框完成呈现?

为了演示这个问题,我写了System.Console,在控件(在我的应用程序中)显示文本之前,我看到许多文本行显示在MS Visual C#Express控制台选项卡中。

我试过Textbox.Update()没有运气,程序继续执行。 Textbox.Refresh()也没有帮助。

如何获得线程(GUI或其他线程)等待文本框完成呈现?

我想执行以下(在伪代码):

Textbox.AppendText("New text\r\n"); 

// Execution blocked until Textbox finishes drawing. 
Textbox.WaitForRenderingToFinish(); 
+1

你可以尝试Application.DoEvents()。此方法将控制权暂时传递给消息泵,以允许处理UI事件。有关文本框为何需要渲染以及需要等待的原因的更多信息才会有用。 – Mike 2011-03-17 22:18:40

+0

也许等待正确的事件之一发生? http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox_events.aspx – 2011-03-17 22:21:45

+0

@Mike:我在文本框中显示状态,例如“初始化与外部计算机的通信”。我希望在外部计算机初始化之前显示文本。在广告中给予用户真相的种类。 – 2011-03-17 22:39:54

回答

0

如果你

Textbox.AppendText("New text\r\n"); 
Application.DoEvents(); 

在本以前的帖子讨论会发生什么:How to force Buttons, TextBoxes to repaint on form after a MessageBox closes in C#这是不好的做法做在UI线程上工作。这是你在做什么?当您执行程序时,整个UI是否反应迟钝,还是仅仅是不会更新的文本框?

+0

:添加'Application.DoEvents()'没有明显的改进。 – 2011-03-17 22:43:45

+0

这里是另一个线程,我刚刚发现可能是相关的:http://stackoverflow.com/questions/439974/how-to-force-buttons-textboxes-to-repaint-on-form-after-a-messagebox-closes -in-C – 2011-03-17 23:01:43