diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs index 901a8b7846..5003b0af48 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs @@ -159,10 +159,9 @@ namespace SearchAndReplace if (i >= taskCount) { HandleResult(queue.Dequeue(), observer, exceptions, files); } - if (exceptions.Count == 0) { - FileName file = files[i]; - queue.Enqueue(System.Threading.Tasks.Task.Factory.StartNew(() => SearchFile(file))); - } + if (exceptions.Count > 0) break; + FileName file = files[i]; + queue.Enqueue(System.Threading.Tasks.Task.Factory.StartNew(() => SearchFile(file))); } while (queue.Count > 0) { HandleResult(queue.Dequeue(), observer, exceptions, files); diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs index 04088324dc..d8e64d0dfd 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/DefaultSearchResult.cs @@ -142,6 +142,7 @@ namespace SearchAndReplace public class ObserverSearchResult : DefaultSearchResult, IObserver { Button stopButton; + bool finished; public ObserverSearchResult(string title) { @@ -164,18 +165,24 @@ namespace SearchAndReplace { var items = base.GetToolbarItems(); - stopButton = new Button { Content = new Image { Height = 16, Source = PresentationResourceService.GetBitmapSource("Icons.16x16.Debug.StopProcess") } }; - stopButton.Click += StopButtonClick; + if (!finished) { + stopButton = new Button { Content = new Image { Height = 16, Source = PresentationResourceService.GetBitmapSource("Icons.16x16.Debug.StopProcess") } }; + stopButton.Click += StopButtonClick; + + items.Add(stopButton); + } - items.Add(stopButton); - stopButton.Visibility = Visibility.Visible; return items; } void StopButtonClick(object sender, RoutedEventArgs e) { - stopButton.Visibility = Visibility.Hidden; - if (Registration != null) Registration.Dispose(); + try { + stopButton.Visibility = Visibility.Hidden; + if (Registration != null) Registration.Dispose(); + } finally { + finished = true; + } } void IObserver.OnNext(SearchedFile value) @@ -191,9 +198,13 @@ namespace SearchAndReplace void OnCompleted() { - stopButton.Visibility = Visibility.Collapsed; - if (Registration != null) - Registration.Dispose(); + try { + stopButton.Visibility = Visibility.Collapsed; + if (Registration != null) + Registration.Dispose(); + } finally { + finished = true; + } } void IObserver.OnCompleted()