デリゲート(delegate)
- 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,299 views




