मुझे कोई सफलता के साथ थोड़ी देर के लिए मेरी विशेष समस्या के लिए एक जवाब के लिए खोज की है में बनाई गई है समापन।एक रूप है कि एक और धागा
मैं अपने प्रोग्राम है जो कुछ ही सेकंड लगते में एक कार्य है और मैं एक नए रूप को दिखाने के लिए है, जबकि उस कार्य किया जा रहा है चाहता हूँ। नए रूप में एक लोडिंगबार और कुछ पाठ है।
मैं काम करने के लिए नए रूप समानांतर दिखाने के लिए अन्यथा कार्य तक मैं नए रूप को बंद शुरू नहीं होगी की जरूरत है।
यह समाधान है मैं अब है:
private void loadingBar()
{
frmLoading frm = new frmLoading("Please wait while the database is being backed up", "This might take several days.");
frm.ShowDialog();
}
public void Backup()
{
Thread load = new Thread(new ThreadStart(loadingBar));
load.Start();
///Execute a task.
load.Abort();
}
तो, यह ठीक काम करता है, लेकिन मेरा सवाल यह है: लोड सूत्र में फार्म "frm" बंद करने के लिए नहीं यह बेहतर होगा बनाने के लिए यह रुकता है?
एक प्रगति बार की तरह व्यवहार यह काम करता है। जिस फ़ॉर्म को आप दिखाना चाहते हैं उसके लिए पृष्ठभूमि थ्रेड सबवेरिएन्ट के रूप में "प्रक्रिया" चलाएं। फिर उस फॉर्म को "मुख्य" थ्रेड से कॉल करें। मुख्य धागा आपके लोडिंग फॉर्म को दिखाएगा, जबकि लोडिंग फॉर्म पृष्ठभूमि थ्रेड के रूप में कुछ चलाता है। इस तरह लोडिंग फॉर्म स्वयं प्रक्रिया को ट्रैक कर सकता है और इसे खत्म होने के बाद खुद को बंद कर सकता है। – Nevyn
@ डेव क्यों न केवल 'BackgroundWorker' का उपयोग करें? इसके अलावा - आप थ्रेड के लिए उस कोड को 'उपयोग()' कथन में रखने पर विचार करना चाहेंगे, फिर यह पूरा होने पर स्वयं को निपटान करेगा। – Hexie
यह मौलिक रूप से गलत काम है। कार्यकर्ता थ्रेड पर यूआई प्रदर्शित करने के लिए कई बहुत ही खराब विफलता मोड हैं।आपको इसे दूसरी तरफ करने की ज़रूरत है, यूआई थ्रेड पर "लोडिंग" विंडो प्रदर्शित करें, वर्कर थ्रेड पर बैकअप करें। –