एक और विकल्प थ्रेडपूल थ्रेड पर फ़ॉर्म दिखाने के लिए एसिंक्रोनस प्रतिनिधि का उपयोग करना है।
थ्रेडपूल में थ्रेड छोटे रहने वाले धागे के लिए अनुशंसित हैं जो पूरे आवेदन अवधि के लिए नहीं टिकते हैं। चूंकि यह एक अल्पकालिक प्रदर्शित करने के लिए है कृपया विंडो की प्रतीक्षा करें, थ्रेडपूल एक उचित विकल्प है।
एक्शन प्रतिनिधि (.NET 2.0+) का उपयोग थ्रेडपूल थ्रेड पर स्वचालित रूप से प्रतिनिधि कोड चलाने के लिए इसके BeginInvoke() विधि के साथ किया जाता है।
कुछ नोट:
- यह ClosePleaseWait में कृपया प्रतीक्षा करें प्रपत्र बंद करने के रूप में किसी भी पार धागा जीयूआई कॉल, के लिए Control.BeginInvoke उपयोग करने के लिए महत्वपूर्ण है()।
- इसके अलावा,
m_pleaseWaitForm.ShowDialog();
वास्तव में नए धागे में एक नया संदेश पाश शुरू करता है। यह वही है जो कृपया जीवित प्रतीक्षा फार्म रखता है।
- क्योंकि थ्रेडपूल थ्रेड का उपयोग किया जाता है, यह धागा स्वचालित रूप से पृष्ठभूमि धागा होता है और मुख्य एप्लिकेशन बंद होने पर समाप्त कर दिया जाएगा।
- किसी अन्य धागे पर चलने के अलावा, फॉर्म 2 के बारे में कुछ खास नहीं है। आप किसी भी बच्चे के नियंत्रण जैसे कि पिक्चरबॉक्स, लेबल इत्यादि रख सकते हैं।
(MethodInvoker)delegate { ... }
एक प्रतिनिधि इनलाइन में कोड चलाने का सिर्फ एक .NET 2.0 तरीका है।
नीचे दिया गया उदाहरण फॉर्म 1: मुख्य फॉर्म, और फॉर्म 2 युक्त विनफॉर्म प्रोजेक्ट में जोड़ा जा सकता है: कृपया प्रतीक्षा करें फॉर्म।
private Form2 m_pleaseWaitForm = null;
private void Form1_Shown(object sender, EventArgs e)
{
// This code could also be placed in eg. a button click event handler.
Action<Rectangle> a = new Action<Rectangle>(ShowPleaseWait);
a.BeginInvoke(this.Bounds, null, null);
// Do your long running tasks
ClosePleaseWait();
}
private void ShowPleaseWait(Rectangle bounds)
{
// This method runs on the new thread.
m_pleaseWaitForm = new Form2();
m_pleaseWaitForm.TopMost = true;
m_pleaseWaitForm.Location = new Point(bounds.Left + bounds.Width/2 - m_pleaseWaitForm.Width/2, bounds.Top + bounds.Height/2 - m_pleaseWaitForm.Height/2);
m_pleaseWaitForm.ShowDialog();
}
private void ClosePleaseWait()
{
m_pleaseWaitForm.BeginInvoke((MethodInvoker)delegate { m_pleaseWaitForm.Close(); });
}
यह वास्तव में वेब रूपों है, या इस WinForms है? आप एक्सेल और वीएसटीओ के बारे में बात कर रहे हैं। और यदि यह वेबफॉर्म है, तो आपके पास रीफ्रेश विधि नहीं है। –
क्षमा करें, हाँ, Winforms, वेबफॉर्म नहीं .. सवाल संपादित किया है ... यह एक लंबा दिन रहा है ... –
पूर्ण स्रोत कोड नमूना के साथ कोई अंतिम समाधान? सी #, सिग्नलआर का उपयोग कर चरणों के साथ लंबी चल रही प्रक्रिया का उपयोग करने के बारे में क्या? – Kiquenet