将状态消息异步写入文本框?

时间:2010-04-23 16:52:22

标签: c# winforms asynchronous

我最近开始使用C#在WinForms中编程。我有一个要求,我需要搜索一组文件夹和子文件夹,并在我搜索时将状态信息显示到文本框 -

查找文件夹“C:\ Windows”...
找到8个文件...
将文件1中的8复制到“D:\ Temp”...

我有一个方法可以完成所有的搜索工作。我不知道如何定期向文本框显示状态消息(如上所述)。目前,表单等待方法完成,并一次显示所有消息。我希望随着方法的进展逐一显示它们。

提前致谢。

3 个答案:

答案 0 :(得分:2)

要正确解决此问题,您的搜索功能需要在后台线程上运行。如果在UI线程上进行搜索,它将阻止对显示的更新,从而防止显示定期状态消息。

在WinForms应用程序中执行此操作的最简单方法是使用BackgroundWorker。它至少支持在后台运行任务并将进度信息返回给UI线程。此外,还有许多在线提供的教程可帮助您开始使用解决方案。

答案 1 :(得分:1)

使用BackgroundWorkerThread和ReportStatus函数。这样,您的UI将在搜索发生时响应。

答案 2 :(得分:1)

运行在单独线程上执行搜索的方法(如果您还没有这样做)。使用async delegate features in .NET非常容易。

然后,您可以使用Control.BeginInvoke()从工作线程写入文本框 - 您必须执行此操作,因为对UI控件的访问权限与单个UI线程相关联。

您还可以创建background worker thread并使用ReportProgress方法向UI通知更新。这里有fairly complete example这种方法可以下载和检查。