その場合Invokeメソッドを使用しフォーム側のスレッドでメソッドを実行しコントロールの操作を行う。
フォームのコントロール操作はフォーム側のスレッドで行われるので注意する。
以下、Invokeメソッドを使用したメソッドの呼び出しによるフォーム上のコントロールの取得とセットの例。
■ソースコード
ダウンロード:http://www.geocities.jp/battlescouter/zip/invoke.zip
■画面

例:backgroundWorker.DoWorkのタイミングでテキストボックスの値を取得、別のテキストボックスにセットする。
■デザイナ

■コード
- using System;
- using System.ComponentModel;
- using System.Windows.Forms;
- namespace invoke
- {
- public partial class Form1 : Form
- {
- //値取得用デリゲート
- delegate string dlgGetText();
- delegate void dlgSetText(string set);
- public Form1()
- {
- InitializeComponent();
- // バックグラウンド処理メソッド追加
- //DoWork:メソッド追加
- this.backgroundWorker1.DoWork +=
- new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
- }
- private void btnStart_Click(object sender, EventArgs e)
- {
- //バックグラウンドDoWork処理開始
- this.backgroundWorker1.RunWorkerAsync();
- }
- private string getText()
- {
- //テキストボックス1の値を取得する
- return this.textBox1.Text;
- }
- private void setText(string setString)
- {
- //引数値をテキストボックス2にセットする
- this.textBox2.Text = setString;
- }
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- string get;
- //テキストボックス1の値を取得する
- get = Invoke(new dlgGetText(getText)).ToString();
-
- //取得した値をテキストボックス2にセットする
- Invoke(new dlgSetText(setText), new object[] {get});
- }
- }
- }
0 件のコメント:
コメントを投稿