C#在执行其他操作时刷新窗口

C#在执行其他操作时刷新窗口,c#,datagridview,refresh,progress-bar,C#,Datagridview,Refresh,Progress Bar,下面的场景。我有一个datagridview和一个progressbar,datagridview中填充了一些来自active directory的数据。填充我的datagridview大约需要3分钟。现在,当我的程序运行时,一切都很好,直到我切换窗口——比如打开web浏览器或其他任何东西。当我切换回我的程序时,整个窗口被“冻结”,在填充完成之前,progressbar不会显示任何进度。如何刷新我的datagridview和progressbar,使类似的事情不再发生?我试过每隔5秒运行一次da

下面的场景。我有一个datagridview和一个progressbar,datagridview中填充了一些来自active directory的数据。填充我的datagridview大约需要3分钟。现在,当我的程序运行时,一切都很好,直到我切换窗口——比如打开web浏览器或其他任何东西。当我切换回我的程序时,整个窗口被“冻结”,在填充完成之前,progressbar不会显示任何进度。如何刷新我的datagridview和progressbar,使类似的事情不再发生?我试过每隔5秒运行一次datagdidview.Invalidate()和Refresh()(通过计时器,是的,它是启用的),但不起作用。我错过了什么


谢谢

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

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

您应该在单独的线程中获取数据(例如,使用
BackgroundWorker
或新线程),在需要与UI交互时编组回UI线程(使用
控件上的
BackgroundWorker.ReportProgress
。调用
/
BeginInvoke
)。有关更多信息和示例代码,请参阅。

您应该在单独的线程中获取数据(例如,使用
BackgroundWorker
或新线程),在需要与UI交互时编组回UI线程(使用
控件上的
BackgroundWorker.ReportProgress
。调用
/
BeginInvoke
)。有关更多信息和示例代码,请参阅