首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Windows 8 開發入門(五):MessageDialog 取代 MessageBox 與 async/await 非同步模式

     編輯:關於C#

Windows 8 棄用 MessageBox,改用 Windows.UI.Popups.MessageDialog,配合 async/await 實現非阻塞 UI 的對話方塊。

MessageDialog 核心成員

成員用途
ShowAsync()非同步顯示對話方塊
Commands自訂按鈕集合 (UICommand)
DefaultCommandIndexEnter 鍵觸發的預設按鈕索引
CancelCommandIndexEsc 鍵觸發的取消按鈕索引
Title對話方塊標題

關鍵字語意

  • async:標記方法包含 await,編譯器生成狀態機
  • await:暫停方法執行直到非同步作業完成,**不阻塞 UI 執行緒**

規則:含 await 的方法必須標記 async。

四種對話方塊進階範例

1. 最簡單:純文字提示

private async void First_Click(object sender, RoutedEventArgs e) {
    var msg = new MessageDialog("Hello World!這是第一個提示。");
    msg.Title = "提示1";
    await msg.ShowAsync();
}

2. 自訂按鈕 + Lambda 回呼

private async void Secend_Click(object sender, RoutedEventArgs e) {
    var msg = new MessageDialog("Hello World!這是第二個提示。") { Title = "提示2" };
    msg.Commands.Add(new UICommand("確定", cmd => tbText.Text = "你點擊了確定按鈕,第二組提示"));
    msg.Commands.Add(new UICommand("取消", cmd => tbText.Text = "你點擊了取消按鈕,第二組提示"));
    await msg.ShowAsync();
}

3. 命令帶 ID + await 取得結果同步判斷

private async void Third_Click(object sender, RoutedEventArgs e) {
    var msg = new MessageDialog("Hello World!這是第三個提示。") { Title = "提示3" };
    msg.Commands.Add(new UICommand("確定", null, 0));
    msg.Commands.Add(new UICommand("取消", null, 1));
    msg.DefaultCommandIndex = 0;
    msg.CancelCommandIndex = 1;

    var result = await msg.ShowAsync();
    switch (Convert.ToInt32(result.Id)) {
        case 0: tbText.Text = "你點擊了確定按鈕,第三組提示"; break;
        case 1: tbText.Text = "你點擊了取消按鈕,第三組提示"; break;
    }
}

4. 命令綁定獨立處理方法

private async void Fourth_Click(object sender, RoutedEventArgs e) {
    var msg = new MessageDialog("Hello World!這是第四個提示。") { Title = "提示4" };
    msg.Commands.Add(new UICommand("確定", new UICommandInvokedHandler(ShowTextEnter)));
    msg.Commands.Add(new UICommand("取消", new UICommandInvokedHandler(ShowTextCancel)));
    msg.DefaultCommandIndex = 0;
    msg.CancelCommandIndex = 1;
    await msg.ShowAsync();
}

private void ShowTextEnter(IUICommand cmd) { tbText.Text = "你點擊了確定按鈕,第四組提示"; }
private void ShowTextCancel(IUICommand cmd) { tbText.Text = "你點擊了取消按鈕,第四組提示"; }

前端按鈕佈局

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Button Name="First" Content="First Msg" Click="First_Click" .../>
    <Button Name="Secend" Content="Second Msg" Click="Secend_Click" .../>
    <Button Name="Third" Content="Third Msg" Click="Third_Click" .../>
    <Button Name="Fourth" Content="Fourth Msg" Click="Fourth_Click" .../>
    <TextBlock Name="tbText" FontSize="16" .../>
</Grid>
MessageDialog 四種模式執行畫面
圖 1:四種對話方塊樣式與回呼結果

原始碼下載:Win8Message.zip

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved