AsyncPatternsWPF.MainWindow.OnSearchAsyncPattern C# (CSharp) Method

OnSearchAsyncPattern() private method

private OnSearchAsyncPattern ( object sender, RoutedEventArgs e ) : void
sender object
e System.Windows.RoutedEventArgs
return void
        private void OnSearchAsyncPattern(object sender, RoutedEventArgs e)
        {
            Func<string, IImageRequest, string> downloadString = (address, req) =>
            {
                var client = new WebClient();
                foreach (var header in req.Headers)
                {
                    client.Headers.Add(header.Key, header.Value);
                }
                client.Credentials = req.Credentials;
                return client.DownloadString(address);
            };

            Action<SearchItemResult> addItem = item => _searchInfo.List.Add(item);

            foreach (var req in GetSearchRequests())
            {
                downloadString.BeginInvoke(req.Url, req, ar =>
                {
                    try
                    {
                        string resp = downloadString.EndInvoke(ar);
                        var images = req.Parse(resp);
                        foreach (var image in images)
                        {
                            this.Dispatcher.Invoke(addItem, image);
                        }
                    }
                    catch (WebException ex) when (ex.Message.Contains("401"))
                    {
                        MessageBox.Show(errorMessage, "Registration Needed");
                    }
                }, null);
            }
        }