[C#] Taskを用いた並列処理
このページのタグ:[C#] [Task]
Taskクラスを用いた並列処理のコードを紹介します。

UI

以下のUIを準備します。

コード

以下のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Threading.Tasks;

namespace SimpleTask
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Task t1 = new Task(Exec1);
      t1.Start();
      Task t2 = new Task(Exec2);
      t2.Start();
    }

    delegate void ShowMessageDelegate(string message);
    private void ShowMessage(string message)
    {
      textBox1.Text += message;
    }

    private void Exec1()
    {
      ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
      for (int i = 0; i < 10; i++) {
        this.Invoke(smd,Convert.ToInt16(i)+",");
        Thread.Sleep(500);        
      }
    }

    private void Exec2()
    {
      ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
      for (int i = 100; i < 110; i++) {
        this.Invoke(smd, Convert.ToInt16(i) + ",");
        Thread.Sleep(500);
      }
    }
  }
}

解説


private void button1_Click(object sender, EventArgs e)
{
  Task t1 = new Task(Exec1);
  t1.Start();
  Task t2 = new Task(Exec2);
  t2.Start();
}
タスクを2つ作成し実行します。Taskのコンストラクタの引数にタスクで実行するメソッドを与えます。


delegate void ShowMessageDelegate(string message);
private void ShowMessage(string message)
{
  textBox1.Text += message;
}

private void Exec1()
{
  ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
  for (int i = 0; i < 10; i++) {
    this.Invoke(smd,Convert.ToInt16(i)+",");
    Thread.Sleep(500);        
  }
}

private void Exec2()
{
  ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
  for (int i = 100; i < 110; i++) {
    this.Invoke(smd, Convert.ToInt16(i) + ",");
    Thread.Sleep(500);
  }
}
タスクで実行するメソッドとタスクからメインフォームのテキストボックスに情報を表示するためのデリゲートを記述しています。

実行結果

アプリケーションを実行し、Button1を押します。下図の結果が表示されます。(実行状況により表示内容は変わります。)
テキストボックスに0~9の値と100~109の値が混ざって表示されていることから、Exec1,exec2が同時に実行されていることがわかります。


プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)