2012年5月8日追記:以下のサンプルコードは古いです。Windows 8 Consumer PreviewかつVisual Studio 11 βでは、イグトランスの頭の中(のかけら) » Metro styleアプリでのC++と非同期もご覧ください。
「WinRTにはMessage Boxなんてないぜ」ってデモであったのでしょうか。そういう話をよく見かけるのですが、代わりになるものはないわけがないだろうというわけで見つけてきました。
Windows.UI名前空間にあるMessageDialogというものがそれっぽいです。
緑色の背景のページ上で実行しており、黒い部分がMessageDialogの表示です。なお、後ろのページの緑色も本来はもっと明るい色(LimeGreen)で、MessageDialogを表示している間、少し暗くなっている感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 | using namespace Windows::Foundation; using namespace Windows::UI::Popups; void Application1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::ReoutedEventArgs^ e) { auto d = ref new MessageDialog("Hello world"); auto a = d->ShowAsync(); a->Completed = ref new AsyncOperationCompletedHandler<IUICommand^>( [](IAsyncOperation<IUICommand^>^ op) { // …… }); a->Start(); } |
このように、この結果を受け取るだけで非同期になるようですよ。なんの支援もないと相当厳しいです。C#ならasyncとか使えるみたいですが、Visual C++はどうなんでしょう?
そもそも、C# 1.0みたいにデリゲートをnewするコードを書かないといけないのが面倒です。せめてa->Completed = [](IAsyncOperation<IUICommand^>^ op) {と書けるようになってほしいところ(関数オブジェクトからデリゲートへの暗黙の変換が欲しい)です。
2011年9月25日追記:C#版書きました。
スポンサード リンク |