private async Task <List <string> > SearchDialogLoadingFunction(string searchText, CancellationToken ct, ProgressUpdater progressUpdater) { // simulate one second of loading await Task.Delay(1000, ct); // generate some random items int count = rand.Next(2, 30); var items = new List <string>(count); progressUpdater?.StartNewLoop(count); for (int i = count - 1; i >= 0; --i) { progressUpdater?.SetForLoop(i); items.Add($"{rand.Next(100)}-{searchText}"); ct.ThrowIfCancellationRequested(); } return(items); }
private async void MenuItem_Dialogs_Progress_Click(object sender, RoutedEventArgs e) { const int msTime = 3000; _ProgressDialog.Show($"Showing for {msTime} milliseconds", null, 0); ProgressUpdater progressUpdater = _ProgressDialog.Updater; await Task.Run(async delegate { int progressSteps = 100; int msStep = (int)Math.Round(msTime / (double)progressSteps); progressUpdater.StartNewLoop(progressSteps); for (int i = 0; i < progressSteps; ++i) { progressUpdater.SetForLoop(i, true); await Task.Delay(msStep); } }); _ProgressDialog.Hide(); }