0

名前付きのボタンがbExecuteあり、そのClickイベントハンドラーには次の本体があります。

try
{
    // Activate the progress ring
    prProgress.Visibility = Visibility.Visible;
    prProgress.IsActive = true;
    bExecute.IsEnabled = false;

    // Some Task
    DoTask();
}
catch(Exception ex)
{
    // Do Something
}
finally
{
    // Stop the progress ring
    prProgress.Visibility = Visibility.Collapsed;
    prProgress.IsActive = false;
    bExecute.IsEnabled = true;
}

この方法には次の問題があります。

  • タスクが完了するまでUIハングしているように見え、その後通常どおりに再開します。
  • ProgressRing がアクティブ化されているようには見えません。
  • bExecute ボタンが有効/無効に見えません。

DoExecute()メソッドでラップできます。これによりUITask.Run()解放されますが、有効/無効になっていることも表示されません。ProgressRingbExecute

助言がありますか?

4

2 に答える 2

-1

どのイベント ハンドラーですか? なぜキャッチボディがないのですか?ボディが折りたたまれて無効になっているProgressRingため、アクティブ化されているようには見えません。そのため、ボタンが有効になっているようには見えません。メソッドは、変更が表示されないよりもはるかに高速です。finallyIsActive = falsebExecutebExecuteDoTask

try
{
    // Activate the progress ring
    prProgress.Visibility = Visibility.Visible;
    prProgress.IsActive = true;
    bExecute.IsEnabled = false;

    // Some Task
    var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
    dispatcher.RunAsync(DispatcherPriority.Normal, () => DoTask());
}
catch(Exception)
{
}
finally
{
    // Stop the progress ring
    prProgress.Visibility = Visibility.Collapsed;
    prProgress.IsActive = false;
    bExecute.IsEnabled = true;
}
于 2013-05-04T16:44:47.037 に答える