C# で Invoke
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2688024&SiteID=7
Invoke は、単に Reflection のための機能のようだ。
使ってみたが、 引数の扱いが分からない。
スタックは Invoke する時点でのスタックがそのまま使われる。
ただ単にメソッド呼び出しを解決するためだけの機能のようだ。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace HogeApp { public partial class Form1 : Form { private Hoge hoge = new Hoge(); private MyEventHandler MyHandler; public Form1() { InitializeComponent(); hoge.HogeHandler += new HogeEventHandler(hoge_HogeHandler); this.MyHandler += new MyEventHandler(my_MyHandler); } private void a() { this.Invoke(MyHandler, new object[] {}); } private void hoge_HogeHandler(object sender, HogeEventArgs e) { Console.WriteLine("hoge_HogeHandler"); a(); } private void button1_Click(object sender, EventArgs e) { a(); } private void my_MyHandler() { hoge.foo(); } } class MyEventArgs : EventArgs { public MyEventArgs() { } } delegate void MyEventHandler(); class HogeEventArgs : EventArgs { public HogeEventArgs() { } } delegate void HogeEventHandler(object sender, HogeEventArgs e); class Hoge { public event HogeEventHandler HogeHandler; public Hoge() { } public void foo() { if (HogeHandler != null) { HogeHandler(this, new HogeEventArgs()); } } } }