在做其他事情时C#刷新窗口

时间:2009-09-24 14:16:07

标签: c# datagridview refresh progress-bar

以下方案。我有一个datagridview和一个进度条,datagridview正在填充来自活动目录的一些数据。填充我的datagridview大约需要3分钟。现在,当我的程序正常工作时,一切都很好,直到我切换窗口 - 例如打开网页浏览器或其他任何东西。当我回到我的程序时,整个窗口被“冻结”,进度条在填充完成之前没有显示任何进度。如何刷新datagridview和progressbar以便不再发生这样的事情?我已经尝试过datagdidview.Invalidate()和Refresh()每5秒运行一次(通过Timer,是的,它已启用),但它不起作用。我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

您应该在一个单独的线程中获取数据(例如使用BackgroundWorker或新线程),编组回UI线程(BackgroundWorker.ReportProgress / {{1}上Control.Invoke当你需要与UI交互时。有关详细信息和示例代码,请参阅this article

答案 1 :(得分:2)

您需要在不同的线程上运行UI和工作方法,否则UI将在您的datagridview工作时锁定。