मुझे एक सी # विंडोज़ फॉर्म ऐप मिला है जिसे मैंने एक साथ फेंक दिया है। यह काफी सरल है: \सी # पृष्ठभूमि कार्यकर्ता प्रक्रिया का उपयोग करके टेक्स्टबॉक्स मान अपडेट करें और संलग्न करें
आदानों:
- पाठ स्ट्रिंग
- स्रोत फ़ोल्डर पथ
- गंतव्य फ़ोल्डर पथ
- पूर्णांक
एप्लिकेशन खोजों का टेक्स्ट फ़ाइलों के माध्यम से गिनती दर्ज टेक्स्ट स्ट्रिंग के लिए स्रोत फ़ोल्डर; यदि यह स्ट्रिंग पाता है तो यह उस फ़ाइल और एक छवि फ़ाइल को उसी फ़ोल्डर के साथ गंतव्य फ़ोल्डर में कॉपी करता है। हालांकि यह पूर्णांक इनपुट के आधार पर कई बार ऐसा करता है।
तो मैं एक बटन है, और बटन क्लिक करें घटना में मैं
ProcessImages(tbDID.Text, tbSource.Text, tbDest.Text, comboBoxNumberImages.SelectedItem.ToString());
जो फोन:
private void ProcessImages(string DID, string SourceFolder, string DestFolder, string strNumImages)
{
int ImageCounter = 0;
int MaxImages = Convert.ToInt32(strNumImages);
DirectoryInfo di = new DirectoryInfo(SourceFolder);
foreach (FileInfo fi in di.GetFiles("*.txt"))
{
if (fi.OpenText().ReadToEnd().Contains(DID))
{
//found one!
FileInfo fi2 = new FileInfo(fi.FullName.Replace(".txt", ".tif"));
if (fi2.Exists)
{
try
{
tbOutput.Text += "Copying " + fi2.FullName + " to " + tbDest.Text + "\r\n";
fi2.CopyTo(tbDest.Text + @"\" + fi2.Name, true);
tbOutput.Text += "Copying " + fi.FullName + " to " + tbDest.Text + "\r\n";
fi.CopyTo(tbDest.Text + @"\" + fi.Name, true);
ImageCounter++;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
if (ImageCounter >= MaxImages)
break;
}
}
क्या होता है कि प्रक्रिया ठीक चलाता है, लेकिन मैं एक अद्यतन करना चाहते फ़ाइलों की प्रतिलिपि बनाई गई प्रगति के साथ फॉर्म पर टेक्स्टबॉक्स। मूल रूप से जब यह चल रहा है तो फॉर्म खाली हो जाता है, और समाप्त होने के बाद आउटपुट टेक्स्टबॉक्स में होता है। मैं एक पृष्ठभूमिवर्कर को कार्यान्वित करना चाहता हूं, इसे चलाने के दौरान यूआई को अपडेट करने के लिए इसे प्राप्त करें।
मैंने उदाहरणों को देखा है लेकिन वास्तव में उनका पालन नहीं कर रहा हूं। मेरे पास प्रतिशत पूर्ण मूल्य नहीं है, मैं बस अपडेट करना चाहता हूं। टेक्स्ट प्रत्येक पुनरावृत्ति को बदलता है और इसे प्रदर्शित करता है। मुझे यह भी नहीं लगता कि मुझे वास्तविक प्रतिलिपि कार्रवाई को अलग-अलग धागे में रखना होगा, ऐसा लगता है कि इसे मुख्य UI थ्रेड से अलग से चलाने की आवश्यकता है। हो सकता है कि मैं इसे पूरी तरह से जटिल कर रहा हूं ... क्या कोई मुझे सही दिशा में धक्का दे सकता है? धन्यवाद!
ओपी सही रास्ते, BackgroundWorker, जो दोनों पृष्ठभूमि धागा बनाता है उपयोग करने के लिए है, जिस पर पहले से ही है (अच्छी तरह से, यह एक का उपयोग करता है पूल थ्रेड), और आपके पिछले अनुच्छेद में बताए गए कुछ मुद्दों से संबंधित है। –
ओपी यह इंगित नहीं करता है कि फ़ाइल प्रोसेसिंग होने पर यूआई में यूजर में कुछ और करने के लिए है, इसलिए पृष्ठभूमि थ्रेड आईएमओ ओवरकिल हो सकता है। – dthorpe