|
1 | 1 | using System;
|
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.Diagnostics.Contracts;
|
3 | 4 | using System.Drawing;
|
4 | 5 | using System.IO;
|
@@ -108,14 +109,29 @@ private async void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
108 | 109 | if (loadSymbolsTask != null)
|
109 | 110 | {
|
110 | 111 | loadSymbolsTaskToken.Cancel();
|
111 |
| - await loadSymbolsTask; |
| 112 | + |
| 113 | + try |
| 114 | + { |
| 115 | + await loadSymbolsTask; |
| 116 | + } |
| 117 | + catch |
| 118 | + { |
| 119 | + |
| 120 | + } |
112 | 121 |
|
113 | 122 | loadSymbolsTask = null;
|
114 | 123 | }
|
115 | 124 |
|
116 | 125 | if (updateProcessInformationsTask != null)
|
117 | 126 | {
|
118 |
| - await updateProcessInformationsTask; |
| 127 | + try |
| 128 | + { |
| 129 | + await updateProcessInformationsTask; |
| 130 | + } |
| 131 | + catch |
| 132 | + { |
| 133 | + |
| 134 | + } |
119 | 135 |
|
120 | 136 | updateProcessInformationsTask = null;
|
121 | 137 | }
|
@@ -436,11 +452,20 @@ private void MainForm_DragDrop(object sender, DragEventArgs e)
|
436 | 452 | }
|
437 | 453 | }
|
438 | 454 |
|
439 |
| - private void processUpdateTimer_Tick(object sender, EventArgs e) |
| 455 | + private async void processUpdateTimer_Tick(object sender, EventArgs e) |
440 | 456 | {
|
441 | 457 | if (updateProcessInformationsTask == null || updateProcessInformationsTask.IsCompleted)
|
442 | 458 | {
|
443 |
| - updateProcessInformationsTask = remoteProcess.UpdateProcessInformationsAsync(); |
| 459 | + try |
| 460 | + { |
| 461 | + updateProcessInformationsTask = remoteProcess.UpdateProcessInformationsAsync(); |
| 462 | + |
| 463 | + await updateProcessInformationsTask; |
| 464 | + } |
| 465 | + catch |
| 466 | + { |
| 467 | + |
| 468 | + } |
444 | 469 | }
|
445 | 470 | }
|
446 | 471 |
|
@@ -626,29 +651,38 @@ private void LoadFileFromPath(string filePath, ref ReClassNetProject project)
|
626 | 651 | }
|
627 | 652 | }
|
628 | 653 |
|
629 |
| - private void LoadAllSymbolsForCurrentProcess() |
| 654 | + /// <summary>Loads all symbols for the current process and displays the progress status.</summary> |
| 655 | + private async void LoadAllSymbolsForCurrentProcess() |
630 | 656 | {
|
631 |
| - var progressDialog = new SymbolReaderProgressForm(); |
632 |
| - progressDialog.Show(this); |
| 657 | + if (loadSymbolsTask != null && !loadSymbolsTask.IsCompleted) |
| 658 | + { |
| 659 | + return; |
| 660 | + } |
633 | 661 |
|
634 |
| - Enabled = false; |
| 662 | + infoToolStripStatusLabel.Visible = true; |
635 | 663 |
|
636 | 664 | int index = 0;
|
637 |
| - remoteProcess.LoadAllSymbols((current, modules) => |
638 |
| - { |
639 |
| - progressDialog.ProgressMaximum = modules.Count(); |
640 |
| - progressDialog.ProgressValue = ++index; |
641 | 665 |
|
642 |
| - progressDialog.ProgressText = $"[{progressDialog.ProgressValue}/{progressDialog.ProgressMaximum}] {current.Name}"; |
| 666 | + var progress = new Progress<Tuple<RemoteProcess.Module, IEnumerable<RemoteProcess.Module>>>( |
| 667 | + report => |
| 668 | + { |
| 669 | + infoToolStripStatusLabel.Text = $"[{++index}/{report.Item2.Count()}] Loading symbols for module: {report.Item1.Name}"; |
| 670 | + } |
| 671 | + ); |
643 | 672 |
|
644 |
| - Application.DoEvents(); |
| 673 | + loadSymbolsTaskToken = new CancellationTokenSource(); |
| 674 | + loadSymbolsTask = remoteProcess.LoadAllSymbolsAsync(progress, loadSymbolsTaskToken.Token); |
645 | 675 |
|
646 |
| - return true; |
647 |
| - }); |
| 676 | + try |
| 677 | + { |
| 678 | + await loadSymbolsTask; |
| 679 | + } |
| 680 | + catch |
| 681 | + { |
648 | 682 |
|
649 |
| - Enabled = true; |
| 683 | + } |
650 | 684 |
|
651 |
| - progressDialog.Close(); |
| 685 | + infoToolStripStatusLabel.Visible = false; |
652 | 686 | }
|
653 | 687 | }
|
654 | 688 | }
|
0 commit comments