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") );
なるほどね。