KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I Want to write my own control, when the ctor is invoked, a MessageBox is shown. public class Class1 { public Class1() { ShowDialog(); } void ShowDialog() { SynchronizationContext context = SynchronizationContext.Current; if (context != null) { context.Post((f) => { MessageDialog dialog = new MessageDialog("Hello!"); dialog.ShowAsync(); }, null); } } } If my class is used by someone, and write the codes as below, UnauthorizedAccessException is always thrown in dialog.ShowAsync(); void MainPage_Loaded(object sender, RoutedEventArgs e) { ClassLibrary1.Class1 c1 = new ClassLibrary1.Class1(); MessageDialog dialog1 = new MessageDialog(""); dialog1.ShowAsync(); } Is there a way to show a message dialog without exception? I found a way, enjoy it! Task ShowDialog() { CoreDispatcher dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher; Func<object, Task<bool>> action = null; action = async (o) => { try { if (dispatcher.HasThreadAccess) await new MessageDialog("Hello!").ShowAsync(); else { dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => action(o)); } return true; } catch (UnauthorizedAccessException) { if (action != null) { Task.Delay(500).ContinueWith(async t => await action(o)); } }
Tags (comma-separated)
Save Edits
Cancel