I'm building an application to retrieve an image from internet. Even though it works fine, it is slow (on wrong given URL) when using try-catch statements in the application.
(1) Is this the best way to verify URL and handle wrong input - or should I use Regex (or some other method) instead?
(2) Why does the application try to find images locally if I don't specify http:// in the textBox?
private void btnGetImage_Click(object sender, EventArgs e) { String url = tbxImageURL.Text; byte[] imageData = new byte[1]; using (WebClient client = new WebClient()) { try { imageData = client.DownloadData(url); using (MemoryStream ms = new MemoryStream(imageData)) { try { Image image = Image.FromStream(ms); pbxUrlImage.Image = image; } catch (ArgumentException) { MessageBox.Show("Specified image URL had no match", "Image Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } catch (ArgumentException) { MessageBox.Show("Image URL can not be an empty string", "Empty Field", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (WebException) { MessageBox.Show("Image URL is invalid.\nStart with http:// " + "and end with\na proper image extension", "Not a valid URL", MessageBoxButtons.OK, MessageBoxIcon.Information); } } // end of outer using statement } // end of btnGetImage_Click EDIT: I tried the suggested solution by Panagiotis Kanavos (thank you for your effort!), but it only gets caught in the if-else statement if the user enters http:// and nothing more. Changing to UriKind.Absolute catches empty strings as well! Getting closer :) The code as of now:
private void btnGetImage_Click(object sender, EventArgs e) { String url = tbxImageURL.Text; byte[] imageData = new byte[1]; Uri myUri; // changed to UriKind.Absolute to catch empty string if (Uri.TryCreate(url, UriKind.Absolute, out myUri)) { using (WebClient client = new WebClient()) { try { imageData = client.DownloadData(myUri); using (MemoryStream ms = new MemoryStream(imageData)) { imageData = client.DownloadData(myUri); Image image = Image.FromStream(ms); pbxUrlImage.Image = image; } } catch (ArgumentException) { MessageBox.Show("Specified image URL had no match", "Image Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (WebException) { MessageBox.Show("Image URL is invalid.\nStart with http:// " + "and end with\na proper image extension", "Not a valid URL", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } else { MessageBox.Show("The Image Uri is invalid.\nStart with http:// " + "and end with\na proper image extension", "Uri was not created", MessageBoxButtons.OK, MessageBoxIcon.Information); } I must be doing something wrong here. :(

ArgumentExceptionorWebExceptionmean a problem with the URL?