以下方案。我有一个datagridview和一个进度条,datagridview正在填充来自活动目录的一些数据。填充我的datagridview大约需要3分钟。现在,当我的程序正常工作时,一切都很好,直到我切换窗口 - 例如打开网页浏览器或其他任何东西。当我回到我的程序时,整个窗口被“冻结”,进度条在填充完成之前没有显示任何进度。如何刷新datagridview和progressbar以便不再发生这样的事情?我已经尝试过datagdidview.Invalidate()和Refresh()每5秒运行一次(通过Timer,是的,它已启用),但它不起作用。我在这里缺少什么?
谢谢!
答案 0 :(得分:3)
您应该在一个单独的线程中获取数据(例如使用BackgroundWorker
或新线程),编组回UI线程(BackgroundWorker.ReportProgress
/ {{1}上Control.Invoke
当你需要与UI交互时。有关详细信息和示例代码,请参阅this article。
答案 1 :(得分:2)
您需要在不同的线程上运行UI和工作方法,否则UI将在您的datagridview工作时锁定。