Voorkom exceptions van MessageDialogs

Wanneer je MessageDialogs gebruikt voor het tonen van meldingen aan de gebruiker moet je op letten dat je niet probeer een dialog te openen terwijl er nog een andere MessageDialog open staat. Doe je dat wel wordt er een exception gegooid. Wanneer de message dialog niet perse hoeft te worden getoont kan je natuurlijk met een simpele try catch de exception oplossen. Echter laat je niet voor niks de Melding zien. Hiervoor moeten dus extra maatregelen worden getroffen. Met een simpele extension method kan je zorgen dat de meldingen na elkaar verschijnen.

 

public static class MessageDialogShower
    {
        private static SemaphoreSlim _semaphore;

        static MessageDialogShower()
        {
            _semaphore = new SemaphoreSlim(1);
        }

        public static async Task<IUICommand> ShowDialogSafely(this MessageDialog dialog)
        {
            await _semaphore.WaitAsync();
            var result = await dialog.ShowAsync();
            _semaphore.Release();
            return result;
        }
    }

Gebruik nu voortaan deze extension method ipv de ShowAsync method. Je kan het eenvoudig tensten door in de onnavigate de volgende method toe te voegen, natuurlijk zou in dit geval await voor ShowAsync afdoende zijn maar het is vooral handig wanneer je uit verschillende processen een dialog wil tonen:

var d1 = new MessageDialog("1 test");
d1.ShowDialogSafely();

var d2 = new MessageDialog("2 test");
d2.ShowDialogSafely();

  

  •   RT @VisualStudio: In this episode, we're joined by Kasey Uhlenhuth (@kuhlenhuth) who shows some of the refactoring features available in Vi…
  •   @VSTS problems with build queues atm?
  •   RT @donasarkar: Hi #WindowsInsiders we have released Build 17713 to the Fast ring! This build has several new features we think IT Pros wil…
  •   RT @maryjofoley: ICYMI, another Windows 10 on ARM PC is available: Lenovo Miix 630 ARM-based 2-in-1 Windows tablet goes on sale for $900 ht…
  •   the moment you have a meeting and skype for business protocol handller is lost again ...
  •   @LocalJoost Surface Go vanaf 27 augustus te bestellen?
  •   tnx @VistaHypotheken https://t.co/qFoQS6mQ63
  •   @gotheap based on the link i understand they should show up after a build as well? i only see them for the test on… https://t.co/XadwWJjIAM
  •   @panos_panay will the surface go with lte have gps? i need a new device to run my own app for navigation while flying around
  •   @aaronbjork @IoannisKarlis @Jira @VSTS and replace delivery plans with the feature timeline extension. that is really helpful!