1

スマート デバイス プロジェクトでコントロールを長時間描画することに問題があります。

アプリケーションをフリーズするコードは次の~11sとおりです。

SAdr = this.ExecuteSQL("select * from dba." + table);
while (SAdr.Read())
{
    PictureBox pBox = new PictureBox();
    pBox.Image = Program.ByteArrayToImage((byte[])SAdr["IMGDATA"]);
    pBox.Name = String.Format("pictureBox{0}#{1}",nameKey ,Int16.Parse(SAdr[colName].ToString()));
    pBox.Width = pBox.Height = size;
    pBox.Left = marginL;
    pBox.Top = marginT;
    pBox.SizeMode = PictureBoxSizeMode.StretchImage;
    pBox.Click += new EventHandler(pBoxTow_Click);

    if (counter < cols)
        marginL += size + space;
    else
    {
        marginL = 10;
        marginT += size + space;
        counter = 0;
    }
    panel.Controls.Add(pBox);
    counter++;
}
panelCenter.Controls.Clear();
panelCenter.Controls.Add(panel);

SAdr = this.ExecuteSQL("select * from dba." + table);この時間は、行から行への測定panelCenter.Controls.Clear();です。

このコードを改善する方法はありますか?

4

2 に答える 2

1

シングル スレッド アプリケーションがデータベースからデータを取得しており、その操作中に GUI がフリーズします。別のスレッドからデータベースにアクセスすることを検討する必要があります。

于 2012-09-26T10:49:23.060 に答える
1

テーブルから配列にデータを読み取ります (画像を格納するために、おそらく配列で)。次に、データの読み取りが完了したら、コントロールの作成を開始します。ローカル配列からピクチャボックスに入力する方が、テーブルから各項目を読み取って同時に入力するよりも高速です。

配列を使用して、データベース操作を GUI 操作から分離します。

于 2012-09-26T10:51:11.810 に答える