脱線しすぎた

イベントベースの非同期パターンってどうやって元のスレッドで完了通知を実行してるんだろ?

Control.BeginInvoke もどうやってるんだろ?

WinForm なら、ウィンドウにメッセージ投げればできるのかも

これって .NET 以前でも同じことだよなぁ

Advanced Windows を読みふける

ウィンドウメッセージのキューはスレッド毎と知る。 な、なんだってー!

using System;
using System.Threading;
using System.Windows.Forms;

namespace WindowsForms2
{
  static class Program
  {
    [STAThread]
    static void Main()
    {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault( false );

      Thread a = new Thread( Start );
      a.Start();

      Thread b = new Thread( Start );
      b.Start();

      Application.Run( new Form1() );
    }

    public static void Start()
    {
      Application.Run( new Form1() );
    }
  }
}

Form1 は適当に用意してください。なお、中途半端な知識に基づいているため、これは正しいものなのかわかりません。

本当に3つの Form が出て動いた…びっくり

そういえば STA って、これと何か関係あるの?

STA がウィンドウメッセージを使用してメソッドの呼び出しを行ってることを知る。 な、なんだってー!

mozilla の COM もどきも同じ仕組みなの?

コード見てみるもどこが何だかわからず…。あれ、何してたんだっけ? ← 今ここ

.NET 以前は Windows プログラムって数えるほどしか書いたことなくて、知識が穴だらけです。ガンガル