よろしくお願い致します。
###前提・実現したいこと
c#にて、
事前に設定した質問と解答を
dbから取得し動的にコントロールを
配置するシステムを作っています。
コントロール生成に時間がかかってしまい
ここの速度をあげたいです。
現在、100コントロールで3秒程度。
これを1秒程度にしたい。
また、速度アップが無理であれば
他の仕様に変更することも可能。
###発生している問題・エラーメッセージ
画面にはtabcontrolの上に
layoutflowpanelを乗せ
その上にコントロールを追加しています。
追加するコントロールは
その都度dbから取得しています。
基本的には例えば以下のようなコントロールを
追加しています。
氏名 ラベル
氏名解答欄 テキストボックス
生年月日 ラベル
生成月日解答欄 ラジオボタン
(元号 大.昭,平)
テキストボックス3つ
(年、月、日)
ソースとしては以下のような形です
FlowLayoutPanel flowPanel = new FlowLayoutPanel();
flowPanel.Dock = DockStyle.Fill;
flowPanel.FlowDirection = FlowDirection.TopDown;
flowPanel.AutoScroll = true;
this.Controls.Add(flowPanel);
※下記は1つのボタンですが
ここはdb内容を見ながら都度
コントロールインスタンス生成を
しながら動的に作成。
下記はプロパティ設定はtextのみだが
実際にはsizeなど
他のプロパティ設定もある。
Button button = new Button();
button.Text = i.ToString();
flowPanel.Controls.Add(button);
###試したこと
速度アップのため、ソースの見直しをしましたが
なかなかうまくいかないため、
マルチスレッド化を検証。
上記ソースにて画面を動的生成するのは
2つ目のタブである。
1つ目のタブに関しては
画面は固定で生成している。
そのため、2つ目の画面生成を
マルチスレッド化して
2つ目画面生成をしている間に
1つ目タブの固定画面に対して
ユーザーからの入力を受け付けようとしたが
マルチスレッド側にて画面生成をしているため
1つ目のタブのテキストボックスなどに
入力ができない(画面が触らない)
※お客様としては、2つ目のタブ画面生成時に
1つ目のタブ画面のコントロールに
入力が出来れば最悪仕様としては良い。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
言語 c# 2014
画面はlayout flow panelで動的に作成

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/15 12:19
2017/11/15 13:51