मैं इंटरनेट से एक छवि पुनर्प्राप्त करने के लिए एक आवेदन बना रहा हूँ। भले ही यह ठीक काम करता है, एप्लिकेशन में प्रयास-पकड़ विवरणों का उपयोग करते समय धीमा (गलत दिया गया URL पर) धीमा है।कोशिश-पकड़ से सी # में यूआरएल को प्रमाणित करने का एक बेहतर तरीका?
(1) क्या यह यूआरएल सत्यापित करने और गलत इनपुट को संभालने का सबसे अच्छा तरीका है - या मुझे इसके बजाय रेगेक्स (या कुछ अन्य विधि) का उपयोग करना चाहिए?
(2) यदि टेक्स्टबॉक्स में http: // निर्दिष्ट नहीं करता है तो एप्लिकेशन स्थानीय रूप से छवियों को खोजने का प्रयास क्यों करता है?
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
संपादित करें: मैं पानागिओटिस Kanavos ने सुझाव दिया समाधान की कोशिश की (यदि आप अपने प्रयास के लिए धन्यवाद!), लेकिन यह केवल यदि-बाकी बयान में पकड़ा जाता है, तो उपयोगकर्ता http://
और ज्यादा कुछ नहीं प्रवेश करती है। UriKind.Absolute में बदलना खाली तार भी पकड़ता है! अब तक करीब हो रही है :) कोड:
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);
}
मैं गलत यहाँ कुछ करना ही होगा। :(
आप कैसे जानते हैं कि 'ArgumentException' या' WebException' का अर्थ यूआरएल के साथ एक समस्या है? –
यह डिबगिंग के दौरान मुझे प्राप्त अपवाद था। लेकिन मैं सहमत हूं - इंटरनेट से कई प्रकार के अपवाद डाउनलोड हो सकते हैं। आपके त्वरित उत्तर के लिए –