|
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