- VisualC#
- 2008-01-30 - 更新:2017-02-21
この記事は最終更新日から1年以上経過しています。
バックグラウンドで処理を実行中、メインスレッドのメソッドを実行したいとき、
通常のようには呼び出せないので、デリゲートを使って呼び出します。
メインスレッド
Thread tMain = new Thread(new ThreadStart(SampleThread)); tMain.IsBackground = true; tMain.Start();
デリゲートの定義
delegate void SampleDelegate(string args);
メソッドの定義
private void SampleMethod(string args) { Console.Writeline(args); }
スレッド
private void StartServer() { this.Invoke(new SampleDelegate(this.SampleMethod), "sample text"); }
予めデリゲートを定義せずに処理したい場合
匿名デリゲート
Invoke((MethodInvoker)delegate() { //メインスレッドで行いたい処理 });
デリゲートを使用した配列処理サンプル
Main.Num = new int[10]; List<int> numList = new List<int>(); for (int i = 0; i < 10; i++) { try { Main.Num[i] = i + 1; } catch (Exception ex) { Console.WriteLine(ex.Message); } } Array.ForEach( Array.FindAll(Main.Num, delegate(int element) { return (element) > 0; }), delegate(int element) { numList.Add(element); } ); int[] numArray = numList.ToArray(); // 配列へ変換 Main.Num = new int[numArray.Length]; Array.Copy(numArray, Main.Num, numArray.Length);
2,072 views