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());
            }
        }
    }
}