0

嗨,我有如下方法:

void Foo
{
MethodInvoker method=delegate{
frm2 frm=new frm2();
frm.show();
}

我在这个表单中有一个 datagridview 控件,它从 DB 中进行大量加载,并在 frm2 中的这个 datagridview 中加载数据。

问题是主线程(form1线程)在数据附加到frm2中的datagridview时被冻结。为什么会发生这种情况。

我创建了两个不同的项目,并在这两个项目中将 frm2 和 form1 分开,结果还可以,没有一个冻结发生。

4

1 回答 1

6

好吧,我认为 WinForms 中的任何 UI 操作都只有一个线程。如果您在 Form 构造函数中进行 DB 检索,那么这将在 UI 线程中执行,并且所有表单都会冻结。

您应该创建一个新线程来从 DB 中获取数据并稍后在 UI 线程中的 UI 中进行设置。

于 2012-07-17T07:08:58.567 回答