खोज…


BackgroundWorker का उपयोग करना

पृष्ठभूमि कार्यकर्ता के साथ एक कार्य निष्पादित करना।

टूलबॉक्स से BackgroundWorker नियंत्रण पर डबल क्लिक करें

टूलबॉक्स में BackroundWorker नियंत्रण

इसे जोड़ने के बाद BackgroundWorker कैसे दिखाई देता है।

यहाँ छवि विवरण दर्ज करें

BackgroundWorker1_DoWork ईवेंट प्राप्त करने के लिए अतिरिक्त नियंत्रण पर डबल क्लिक करें और जब बैकग्राउंडर को कॉल किया जाए तो कोड को निष्पादित किया जाए। कुछ इस तरह:

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    'Do the time consuming background task here

End Sub

कार्य करने के लिए BackgroundWorker को कॉल करना किसी भी घटना जैसे कि Button_Click , Textbox_TextChanged , आदि पर किया जा सकता है।

BackgroundWorker1.RunWorkerAsync()

इस प्रकार के रूप में BackgroundWorker के कार्य समाप्त घटना पर कब्जा करने के लिए RunWorkerCompleted घटना को संशोधित करें:

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    MsgBox("Done")
End Sub

यह एक संदेश बॉक्स प्रदर्शित करेगा जिसमें कहा Done कि जब कार्यकर्ता उसे सौंपे गए कार्य को पूरा करेगा।

BackgroundWorker में GUI घटकों को एक्सेस करना

आप BackgroudWorker से किसी भी GUI घटक का उपयोग नहीं कर सकते। उदाहरण के लिए यदि आप ऐसा कुछ करने की कोशिश करते हैं

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
    TextBox1.Text = "Done"
End Sub

आपको यह कहते हुए एक रनटाइम त्रुटि प्राप्त होगी कि "क्रॉस-थ्रेड ऑपरेशन मान्य नहीं है: नियंत्रण 'TextBox1' उस थ्रेड के अलावा किसी थ्रेड से एक्सेस किया गया था जिस पर इसे बनाया गया था।"

ऐसा इसलिए है क्योंकि BackgroundWorker आपके कोड को मुख्य धागे के समानांतर दूसरे धागे पर चलाता है, और GUI घटक थ्रेड-सुरक्षित नहीं हैं। आपको अपना कोड Invoke विधि का उपयोग करके मुख्य थ्रेड पर चलाने के लिए सेट करना होगा, इसे एक प्रतिनिधि दे:

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
    Me.Invoke(New MethodInvoker(Sub() Me.TextBox1.Text = "Done"))
End Sub

या आप BackgroundWorker के ReportProgress विधि का उपयोग कर सकते हैं:

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
    Me.BackgroundWorker1.ReportProgress(0, "Done")
End Sub

Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
    Me.TextBox1.Text = DirectCast(e.UserState, String)
End Sub


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow