मुझे सी # में इस कार्य को रद्द करने का तरीका पता चल रहा है। मुझे धागे को संभालने की पूरी समझ नहीं है और मैंने कुछ सरल कोड उदाहरणों के लिए गूगलिंग की कोशिश की है ताकि मुझे मदद मिल सके लेकिन मुझे वास्तव में कोई जगह नहीं मिली है। यहाँ कोड का टुकड़ा मैं पर काम कर रहा हूँ है:एक कार्य को रद्द करना जो यूआरएल को अतुल्यकालिक रूप से पुनर्प्राप्त करता है
var tasks = urls.Select(url => Task.Factory.StartNew(
state =>
{
using (var client = new WebClient())
{
lock (this)
{
// code to download stuff from URL
}
}
}, url)).ToArray();
try
{
Task.WaitAll(tasks);
}
catch (Exception e)
{
textBox2.AppendText("Error: " + e.ToString());
}
कहाँ "यूआरएल" URL की एक सरणी है। क्या इसे बनाने का कोई आसान तरीका है, जब मैं अपने प्रोग्राम में एक बटन क्लिक करता हूं, तो यूआरएल डाउनलोड करना पूरी तरह से बंद हो जाता है? साथ ही, चिपकाया गया कोड स्निपेट एक ऐसे फ़ंक्शन में है जो BackgroundWorker1 कॉल करता है, जो मुझे लगता है कि चीजों को थोड़ा और जटिल बना सकता है। (कारण है कि मैं एक BackgroundWorker है तो यूआई बंद नहीं करता है, जबकि यह यूआरएल को डाउनलोड कर रहा है।)
हैं कि किसी भी तरह से एक सा भ्रामक है, यहाँ मैं क्या साथ प्राप्त करने के लिए कोशिश कर रहा था की एक रूपरेखा है मेरी कोड:
- मेरे पास URL की एक सरणी है, मैं यूआई को लॉक किए बिना प्रत्येक यूआरएल को असीमित रूप से डाउनलोड करना चाहता हूं।
- मैं अधिमानतः उपयोगकर्ता को बटन को क्लिक करके यूआरएल डाउनलोड करने से रोकने के लिए पसंद करता हूं, थ्रेड को काफी रद्द कर देता हूं।
- जब उपयोगकर्ता दोबारा बटन क्लिक करता है, तो प्रोग्राम उस सरणी से फिर से यूआरएल डाउनलोड करता है।
अग्रिम धन्यवाद।
कृपया अपने प्रश्न शीर्षक में टैग शामिल न करें; यह सिर्फ उन लोगों के लिए अधिक काम करता है जो SO पर स्थिरता की परवाह करते हैं। –