मेरे पास यह एप्लिकेशन है जो किसी दिए गए निर्देशिका में सभी फ़ोल्डरों की पुनरावृत्ति करेगा और पीडीएफ की तलाश करेगा। यदि कोई पीडीएफ फ़ाइल पाई जाती है, तो एप्लिकेशन ITextSharp का उपयोग करके अपने पृष्ठों की गणना करेगा। मैंने पीडीएफ के लिए सभी फ़ोल्डर्स को रिकर्सली स्कैन करने के लिए थ्रेड का उपयोग करके ऐसा किया, फिर यदि पीडीएफ पाया जाता है, तो यह थ्रेड पूल पर कतारबद्ध होगा। कोड इस तरह दिखता है:कैसे पता चलेगा कि सभी थ्रेड पूल के धागे पहले से ही अपने कार्यों के साथ किए गए हैं?
//spawn a thread to handle the processing of pdf on each folder.
var th = new Thread(() =>
{
pdfDirectories = Directory.GetDirectories(pdfPath);
processDir(pdfDirectories);
});
th.Start();
private void processDir(string[] dirs)
{
foreach (var dir in dirs)
{
pdfFiles = Directory.GetFiles(dir, "*.pdf");
processFiles(pdfFiles);
string[] newdir = Directory.GetDirectories(dir);
processDir(newdir);
}
}
private void processFiles(string[] files)
{
foreach (var pdf in files)
{
ThreadPoolHelper.QueueUserWorkItem(
new { path = pdf },
(data) => { processPDF(data.path); }
);
}
}
मेरे समस्या है, मैं कैसे पता है कि थ्रेड पूल के धागे सभी कतारबद्ध आइटम प्रसंस्करण तो मैं कि आवेदन अपने उद्देश्य कार्य के साथ किया जाता है उपयोगकर्ता बता सकते हैं समाप्त हो गया है करते हैं?
मैंने इस तरह के एक समान तर्क किया है। केवल मैंने थ्रेडपूल का उपयोग किया। GetAvailableThreads। मैंने मैक्स थ्रेड को सेट किया है, पूल को 20 तक इस्तेमाल किया जाना चाहिए। इसलिए आखिरी कार्य में मैंने जांच की कि क्या उपलब्ध धागे अधिकतम सेट के बराबर हैं। दुर्भाग्य से यह विफल रहता है। मैं उस मैनुअल रीसेट इवेंट पर शोध करूंगा। –
@mcxiand: आप थ्रेडपूल काउंटर का उपयोग नहीं कर सकते क्योंकि अन्य कोड (lib) थ्रेड बना सकता है और टीपी उन्हें रीसाइक्लिंग/हटा रहा है। –
@ हेनक होल्टरमैन: क्या ऐसा है? जो मैंने समझा वह है कि, ThreadPool QueueUserWorkItem विधि द्वारा कार्य की कतारबद्ध होगी। क्या आप अपनी टिप्पणी के बारे में अधिक जानकारी दे सकते हैं? इसकी बहुत सराहना की जाएगी। –