I am trying to use message dialog in dispatch timer to alter user when the time is complete. but at times it gives following error: \"Access is denied. (Exception from HRESU
The dispatcherTimer_Tick
method is running on a different thread than the UI. If you want to access stuff that is bound to the UI thread, like UX, you must get back onto the UI thread. Easiest way to do this is wrap your code with
Dispatcher.RunAsync()
Like Jeff says, the timer Tick event handler code is running on a different thread than the UI thread. You'll have to get back to this UI thread to manipulate anything in the UI: message dialog, changing properties, etc.
// some code for the timer in your page
timer = new DispatcherTimer {Interval = new TimeSpan(0, 0, 1)};
timer.Tick += TimerOnTick;
timer.Start();
// event handler for the timer tick
private void TimerOnTick(object sender, object o)
{
timer.Stop();
var md = new MessageDialog("Test");
this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => md.ShowAsync());
}
Note that I do stop the timer in the event handler. If you don't close a message dialog in time before another one is shown, you'll get an access denied on the 2nd ShowAsync too (because the first is still open).