Использование
await Task.Delay(1)
сделает метод асинхронным с точки зрения компилятора, но не сделает операцию асинхронной. Все, что он сделает, это освободит поток пользовательского интерфейса на 1 мс.
Чтобы сделать операцию асинхронной, вы можете поместить ее в отдельную функцию и запустить как задачу.
private async Task DoPrint()
{
IsBusy.Visibility = Visibility.Visible;
BusyIndicator.Header = "Imprimiendo...";
var printDialog = new PrintDialog();
if ((bool)printDialog.ShowDialog())
printDialog.PrintVisual(PrintCanvas, "Iprimiendo Venta " + _vm.Sell.Id);
IsBusy.Visibility = Visibility.Hidden;
BusyIndicator.Header = "Cargando...";
}
private void EventHandler()
{
await DoPrint() ;
}
или вы можете сделать то же самое, используя лямбда-функцию
private void EventHandler()
{
await Task.Run ( () =>
{
IsBusy.Visibility = Visibility.Visible;
BusyIndicator.Header = "Imprimiendo...";
var printDialog = new PrintDialog();
if ((bool)printDialog.ShowDialog())
printDialog.PrintVisual(PrintCanvas, "Iprimiendo Venta " + _vm.Sell.Id);
IsBusy.Visibility = Visibility.Hidden;
BusyIndicator.Header = "Cargando...";
});
}
Однако в вашем случае вы, вероятно, хотите, чтобы только некоторые из них были асинхронными.
Полагаю, это только вызов pringDialog.PrintVisual (), который должен быть асинхронным, поэтому достаточно будет запустить его в задаче.
private void EventHandler()
{
IsBusy.Visibility = Visibility.Visible;
BusyIndicator.Header = "Imprimiendo...";
var printDialog = new PrintDialog();
if ((bool)printDialog.ShowDialog())
{
await Task.Run ( () => printDialog.PrintVisual(PrintCanvas, "Iprimiendo Venta " + _vm.Sell.Id) ) ;
}
IsBusy.Visibility = Visibility.Hidden;
BusyIndicator.Header = "Cargando...";
}