0

こんにちは、私は以下のような方法を持っています:

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

そして、このフォーム内に datagridview コントロールがあり、DB から大量の読み込みを行い、この datagridview 内のデータを frm2 に読み込みます。

問題は、データが frm2 の datagridview にアタッチされるときにメイン スレッド (form1 スレッド) がフリーズすることです。これはなぜですか。

2 つの異なるプロジェクトを作成し、これら 2 つのプロジェクトで frm2 と form1 を分離しましたが、結果は問題なく、フリーズも発生していません。

4

1 に答える 1

6

WinForms での UI 操作には 1 つのスレッドしかないと思います。フォーム コンストラクター内で DB の取得を行っている場合、これは UI スレッドで実行され、すべてのフォームがフリーズします。

DB からデータをフェッチする新しいスレッドを作成し、後で UI スレッドの UI に設定する必要があります。

于 2012-07-17T07:08:58.567 に答える