为什么线程在c#中没有正确执行?

时间:2012-07-17 07:05:27

标签: c#

您好我有以下方法:

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

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

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

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

1 个答案:

答案 0 :(得分:6)

嗯,我认为WinForms中的任何UI操作都有一个单独的线程。 如果您在Form构造函数中进行数据库检索,则会在UI线程中执行此操作,并且所有表单都会冻结。

您应该创建一个新线程来从数据库中获取数据,然后在UI线程的UI中设置它。