カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

デリゲート(delegate)

この記事は最終更新日から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&#91;i&#93; = 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,070 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です