[C#]データベースに接続 backgroundWorker追加
C# BackgroundWorkerを使用してみる
.
以前書いたDB接続記事のだと、ちょっと多いレコード読み込むと画面が真っ白になって、操作不能になる。
それは放置していた問題だったが、最近それでかなりイライラさせられた。
なので前回のコードにBackgroundWorkerを加え、バックグラウンドでレコードを取得できるように改修することにした。
改修するにあたって、MSDNと@ITの記事を参考にした。
■参考記事
Windows フォーム コントロールのスレッド セーフな呼び出しを行う
時間のかかる処理をバックグラウンドで実行するには?[2.0のみ、C#、VB]
正直言うと、MSDNにかなり分かりやすいサンプルコードがあって驚いた。
一部分なんか丸々使えた。感謝。
@ITのは、実際にソースコードをダウンロードして、BackgroundWorkerの動きを確認するのに役立った。
で、できたコードは以下に記載。
縦に長すぎて、全体が把握しづらい。
あと、うちのブログには横幅が足りないと思うんだ・・・。
.
.
public partial class Form1 : Form
{
delegate void SetTextCallback(string text);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_button.Enabled = false;
//バックグラウンドの処理を開始
_backgroundWorker.RunWorkerAsync();
}
private void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
DataSet _readDB = new DataSet();
string ConnectionString = "Persist Security Info=False;User ID=sa;Password=XXXXX;Initial Catalog=DBNAME; Server=IPアドレス;";
//SQLと接続文字列を指定してインスタンスを初期化
SqlDataAdapter sqlAdapter = new SqlDataAdapter("select * from dbo.tbl_XXXXX ", ConnectionString);
//結果文字列保持用
string resultmsg = "";
try
{
//DataSetにデータを読み込み
sqlAdapter.Fill(_readDB);
//区切り文字
string sptword = "\t";
foreach (DataRow rowline in _readDB.Tables[0].Rows)
{
string line = "";
foreach (object rowitem in rowline.ItemArray)
{
line += rowitem.ToString().Trim() + sptword;
}
line += Environment.NewLine;
SetText(line);
}
resultmsg = "Result:OK";
}
catch (System.Data.SqlClient.SqlException msg)
{
resultmsg = msg.Message;
}
finally
{
e.Result = resultmsg;
}
}
private void SetText(string text)
{
if (_textBoxquery.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
_textBoxquery.Text += text;
}
}
private void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// テキストボックスに処理結果を取得
_textBoxresult.Text = e.Result.ToString();
_button.Enabled = true;
}
}
.
画面はテキストボックス2つ、ボタン1つの構成。
button1を押すと、バックグラウンドでDBからレコードをテキストボックスに取得・・・という流れ。
前回の記事におおまかなエラー処理が加わっているものの、メインの処理は変わっていない。
これでボタン押して固まることがなくなった。
.
![]() | 猫でもわかるC#プログラミング 第2版 (猫でもわかるシリーズ) 粂井 康孝 ソフトバンククリエイティブ 売り上げランキング : 179567 Amazonで詳しく見る |
![]() | プログラマが知るべき97のこと 和田 卓人,Kevlin Henney,夏目 大 オライリージャパン 売り上げランキング : 3280 Amazonで詳しく見る |
.
- 関連記事
この記事へのコメント
トラックバック
URL :