Silverlight Beta 2では非同期呼び出しができない 続き

と思ったら、Threadクラスを使えばできた。

var thread = new Thread(() => {
    HtmlPage.Window.Alert("Async call");
});
thread.Start();

実行はできたけど、メッセージが表示されない。

デバッグしてみたら、SilverlightでもWinFormアプリケーションと同じようにUIスレッド以外からのUIへのアクセスには例外が出るようになっていた。

WinFormでは「Control.Invoke」を使ってUIにアクセスするので、Silverlightでの同様の方法を探してみたら、以下の方法でできた。

var thread = new Thread(() => {
    this.Dispatcher.BeginInvoke(
        () => HtmlPage.Window.Alert("Async call")
    );
});
thread.Start();

というかDispatcherには「BeginInvoke」メソッドしか用意されていないので、Silverlightでの非同期呼び出しはこうするのか。

this.Dispatcher.BeginInvoke(
    () => HtmlPage.Window.Alert("Async call")
);

なるほどね。