private void SearchInputView_SearchRequested(object sender, SearchRequestEventArgs e)
        {
            _searchResults.Clear();

            // Start up enough threads to fetch the search results
            for (var i = 0; i < _searchProviders.Count(); i++)
            {
                var searchProvider = _searchProviders[i];
                ThreadPool.QueueUserWorkItem(
                    delegate
                    {
                        // Perform the search
                        var results = searchProvider.Search(e.SearchText);

                        // Add the results to the results list
                        Dispatcher.Invoke(
                            DispatcherPriority.Normal,
                            new Action(
                                delegate
                                {
                                    foreach (var result in results)
                                    {
                                        _searchResults.Add(result);
                                    }
                                }));
                    }
                    );
            }
        }
        private void SearchInput_SearchRequested(object sender, SearchRequestEventArgs e)
        {
            View.ClearResults();

            // Start up enough threads to fetch the search results
            for (var i = 0; i < _searchProviders.Count(); i++)
            {
                var searchProvider = _searchProviders[i];
                ThreadPool.QueueUserWorkItem(
                    delegate
                        {
                            // Perform the search
                            var results = searchProvider.Search(e.SearchText);
                            
                            // Add the results to the results list
                            _dispatcher.Dispatch(
                                delegate
                                    {
                                        foreach (var result in results)
                                        {
                                            View.AddResult(result);
                                        }
                                    });
                        }
                    );
            }
        }
        private void GoButton_Click(object sender, RoutedEventArgs e)
        {
            var searchInformation = new SearchRequestEventArgs();
            searchInformation.SearchText = _searchTextBox.Text;

            // Raise the search event
            if (SearchRequested != null)
            {
                SearchRequested(this, searchInformation);
            }
        }