ProgressDialog.cs 976 B

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace InABox.Avalonia.Dialogs;
  7. public static class ProgressDialog
  8. {
  9. public static async Task Execute(string message, Action work)
  10. {
  11. var dialog = new MessageDialogViewModel()
  12. .Message(message);
  13. var task = Task.Run(work).ContinueWith(task =>
  14. {
  15. dialog.Close(MessageDialogResult.None);
  16. }, TaskScheduler.FromCurrentSynchronizationContext());
  17. await dialog.Display();
  18. }
  19. public static async Task<TResult> Execute<TResult>(string message, Func<TResult> work)
  20. {
  21. var dialog = new MessageDialogViewModel()
  22. .Message(message);
  23. var task = Task.Run(work).ContinueWith(task =>
  24. {
  25. dialog.Close(MessageDialogResult.None);
  26. return task.Result;
  27. });
  28. await dialog.Display();
  29. return task.Result;
  30. }
  31. }