Проблема в том, что вы объявляете переменную shown
в локальной области видимости, поэтому она инициализируется и задается каждый раз, когда запускается код окна показа сообщения .
Чтобы избежать этого, объявите это на более высоком уровне - например, на уровне класса. Например, на основе кода, которым вы поделились в комментариях:
class myClass {
private bool _shown;
public async void KomikMsgDialog()
{
if (!_shown) // If we haven't shown the dialog yet
{
MessageDialog messageDialog1 = new MessageDialog("Jumlah komik bertambah sebanyak " + jumlahbuku + " komik pada menu Komik Pendidikan", "Update Berhasil");
messageDialog1.Commands.Add(new UICommand("OK", (command) =>
{
DownloadBukuVideo.IsOpen = false;
Downloading.IsOpen = false;
ukomikBtn.Visibility = Visibility.Visible;
downloadKomikBtn.Visibility = Visibility.Collapsed;
ukomikText.Visibility = Visibility.Collapsed;
ukomikText.Text = "";
}));
await messageDialog1.ShowAsync();
_shown = true; // Flag the dialog as having been shown
}
}
}
Таким образом, при первом вызове метода он будет проверять, было ли показано диалоговое окно, чего не было, поэтому он отобразит диалоговое окно и пометит его как показанный. В следующий раз он проверит флаг и не покажет диалог.