Поэтому я использую: public sealed partial class SynchronizationDialog: ContentDialog
.
У меня есть приложение UWP. Когда я нажимаю кнопку в приложении UWP, открывается SynchronizationDialog
и приложение начинает загружать документы. Прогресс можно увидеть в диалоге.
После завершения загрузки диалоговое окно закрывается с помощью this.Hide();
Теперь моя проблема в том, что когда я нажимаю Escape
-key, диалог исчезает. Тем не менее, загрузка все еще идет, и все работает просто отлично.
Как я могу предотвратить исчезновение Диалога? Я попробовал это:
public SynchronizationDialog()
{
this.InitializeComponent();
this.Loaded += SynchronizationDialog_Loaded;
this.Closing += ContentDialog_Closing; //this is what I tried
}
//....
void ContentDialog_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
bool doNotClose = true;
if (doNotClose)
{
args.Cancel = true;
}
}
Диалог не исчезает таким образом. Но после того, как загрузка закончена и это this.Hide();
бывает диалог не скрывается. Я также не могу отменить диалог, поэтому он остается там до перезапуска приложения.
Я бы создал новый логический флаг, который бы указывал, выполняется ли синхронизация, и пользовательский метод, который пометит его как false
а затем перейдет к Hide
:
private bool _workInProgress = true;
public void FinishWork()
{
_workInProgress = false;
this.Hide();
}
Теперь обработчик события Closing
будет обновлен до следующего:
void ContentDialog_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
args.Cancel = _workInProgress;
}
Теперь вместо Hide
используйте метод FinishWork
когда синхронизация завершена.
args.Cancel
в_workInProgress
который имеет значениеtrue
во время синхронизации, но мы устанавливаем его вfalse
вFinishWork
что означает, чтоargs.Cancel
не будет установлен, и закрытие диалога будет продолжено