2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« C# 図形の塗りつぶし色の変え方 | トップページ | python小技 map関数の小技 »

2016年11月13日 (日)

C# イベントを発生させる方法

イベントを発生させる方法。
別スレッドに処理をさせている間に、なにか問題があったときに報告させたり、グラフィックの再描画が必要なタイミングをイベントから知るようにするときに使う。
コンソールアプリで実行できる簡単な例を記載。

メインループでは最初にYobidashiというクラスのインスタンスを作ってstartメソッドを呼び出す。あとはreadlineで入力待ちのため何もしない。

Yobidashiのstartでは、SleepClassが作られて、SleepClassの持つイベントにイベントハンドラが登録される。SleepClassのオブジェクトがStartを呼んだあとは、Startメソッドのなかで3秒間待つ。3秒たったらTime(this,EventArgs.Empty)が実行されて、ここでイベントが発行される。

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace CS_eventTameshi
{
    class Program
    {
        static void Main(string[] args)
        {
            Yobidashi y = new Yobidashi();
            y.start();

            Console.ReadLine();
        }
    }

    class Yobidashi
    {
        public void start()
        {
            SleepClass clsSleep = new SleepClass();

            //イベントハンドラの追加
            clsSleep.Time += new EventHandler(this.SleepClass_Time);
            clsSleep.Start();
        }

        private void SleepClass_Time(object sender, System.EventArgs e)
        {
            //起動してから3秒後におkが表示される。エンター押すと終了
            Console.WriteLine("ok!");
        }
    }
    

    class SleepClass
    {
        public event EventHandler Time;

        public void Start()
        {
            System.Threading.Thread.Sleep(3000);
            if (Time != null)
            {
                Time(this, EventArgs.Empty);
            }
        }

        
    }
}

<自分の勝手な理解>
イベントにイベントハンドラをセットするのは、 C言語で言うところの、関数ポインタをセットしておくのに似ている。

+=という操作をすると、そこで指定した関数へのポインタがセットされる。 イベントを発生させる側で、イベントの関数を実行すると、 その中にセットされていたイベントハンドラへのポインタがロードされて、 今度はそれが実行されるようになる。

そのために、例示したソースの中で
if (Time != null)

というのがあるが、これはeventに何も入っていなければそこへ飛びようがないので、 中身がなければ処理しないということ。

« C# 図形の塗りつぶし色の変え方 | トップページ | python小技 map関数の小技 »

C#」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/64322692

この記事へのトラックバック一覧です: C# イベントを発生させる方法:

« C# 図形の塗りつぶし色の変え方 | トップページ | python小技 map関数の小技 »