मैं लेबल को अद्यतन करने के लिए किसी अन्य वर्ग में थ्रेड लेखन का उपयोग करता हूं। लेबल विनफॉर्म मुख्य श्रेणी में सामग्री है।किसी अन्य धागे से अद्यतन लेबल
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
आप कैसे देख सकते, मैं द्वितीय श्रेणी के निर्माता में लेबल के संदर्भ गुजरती हैं। द्वितीय श्रेणी (स्कैनर) मैं एक विधि "automaticScanner" कहा जाता है कि इस कोड के साथ लेबल अद्यतन करना चाहिए है में:
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
मैं लेबल के अद्यतन पर यह त्रुटि प्राप्त है:
क्रॉस-धागा आपरेशन मान्य नहीं: नियंत्रण 'मुख्य' एक धागा धागा यह बनाया गया था के अलावा अन्य
मैं साथ Winform सी # .net 4 का उपयोग पर से पहुँचा।
उत्तर के लिए बहुत बहुत धन्यवाद।
समाचार:
trd.Join();
यह पंक्ति मेरे जीयूआई ब्लॉक और करने के लिए सक्षम अद्यतन नहीं किया गया था: समस्या इस लाइन है। धागे के खत्म को नियंत्रित करने और अंत तक लेबल को अद्यतन करने के तरीके हैं? धन्यवाद
लेकिन ... अपनी सही कॉल:
सूत्रण के बारे में एक स्पष्ट चित्र प्राप्त करने के लिए इस अध्याय और अधिक इस पुस्तक से के माध्यम से जाने के लिए कृपया? थ्रेड trd = नया थ्रेड (नया थ्रेडस्टार्ट (scanner.scansioneAutomatica)); trd.IsBackground = true; trd.Start(); जबकि (! Trd.IsAlive); trd.Join(); इस मोड में जीयूआई अवरुद्ध है! : एस – Antonio
कक्षा एक्शन कोड के अंदर शामिल करें; और टाइमर में भाग लेने के लिए समारोह निजी शून्य T_Elapsed (ऑब्जेक्ट प्रेषक, सिस्टम.Timers.ElapsedEventArgs ई) { सी ++; // प्रतिनिधि अभिव्यक्ति है "y =() => label1.Text = c.ToString()" लेबल 1। इन्वोक (y =() => लेबल 1।पाठ = सी। टॉस्ट्रिंग()); } –