我正在努力实现GalaSoft.MvvmLight程序集中定义的IDialogService。您可以从nuget包MvvmLightLibs
获取public interface IDialogService
{
Task ShowError(string message, string title, string buttonText, Action afterHideCallback);
Task ShowError(Exception error, string title, string buttonText, Action afterHideCallback);
Task ShowMessage(string message, string title);
Task ShowMessage(string message, string title, string buttonText, Action afterHideCallback);
Task<bool> ShowMessage(string message, string title, string buttonConfirmText, string buttonCancelText, Action<bool> afterHideCallback);
Task ShowMessageBox(string message, string title);
}
我正在尝试实现第一种方法
public Task ShowError(Exception error, string title, string buttonText, Action afterHideCallback)
{
//var result = MessageBox.Show("");
return Dispatcher.Invoke(() => MessageBox.Show("whatever"));
//return Dispatcher.BeginInvoke(delegate () { MessageBox.Show("your stuff"); });
//var dg = new Action(() => { MessageBox.Show("", ""); });
//return Dispatcher.CurrentDispatcher.BeginInvoke(dg);
}
我如何使用Messagebox.Show这个异步方法为wpf?请帮忙。
我试图看看哪些有效,但到目前为止还没有运气。有人可以帮助我吗?
答案 0 :(得分:3)
你说你希望你的showError是异步的,但实际上没有使用async
关键字标记方法,也没有等待任何东西:
public async Task ShowError(Exception error, string title, string buttonText, Action afterHideCallback)
{
await Dispatcher.InvokeAsync(() => MessageBox.Show("whatever"));
Console.WriteLine("awaited Box closed");
}
使用示例:
private async void Button_Click(object sender, RoutedEventArgs e)
{
await ShowError(new Exception("Test"), "test", "um", null);
Console.WriteLine("awaited showError");
}