2009-02-12 10 views
6

क्या यह BackgroundWorker के धागे को "मार" सकता है?क्या पृष्ठभूमिवर्कर के धागे को मारना संभव है?

मेरी DoWork घटना में, मैं रद्दीकरण ध्वज की जांच नहीं कर सकता, क्योंकि मेरे पास अवरोध है जो बाहरी COM इंटरफ़ेस या किसी डेटाबेस को क्वेरी है। CancelAsync COM को कॉल रद्द नहीं करता है।

मैं इसे कैसे कर सकता हूं, कृपया? किसी भी सुझाव की सराहना की जाएगी।

अग्रिम धन्यवाद।

उत्तर

1

मुझे थ्रेड को रोकने के लिए एक सुरक्षित तरीका से अवगत नहीं है।

एक पृष्ठभूमि कार्यकर्ता यह जांच सकता है कि उसे रद्द करना चाहिए और खुद को रद्द करना चाहिए, लेकिन यदि यह डेटाबेस से पूछताछ बंद है तो आप इसे वापस लौटने तक इतना कुछ नहीं कर सकते हैं।

आप थ्रेडपूल थ्रेड पर काम कर सकते हैं और थ्रेड को छोड़ सकते हैं और अगर इसकी आवश्यकता नहीं है तो एक और शुरू करें (सुनिश्चित करें कि जब यह एक डीबी क्वेरी से वापस आता है तो यह जांचता है कि इसे कुछ भी बुरा करने से पहले रद्द करना चाहिए)। बेशक आपको प्रदर्शन को संतुलित करने और थ्रेड सिंक्रनाइज़ेशन प्रबंधित करने की आवश्यकता होगी। यदि आप उस पथ पर जाते हैं, तो आप कुशल महत्वपूर्ण अनुभाग लॉकिंग के लिए इंटरलाक्ड स्टेटिक क्लास पर एक नज़र डाल सकते हैं।

3

नहीं, आप, BackgroundWorker धागा मार नहीं कर सकते हैं तो आप केवल इसे रद्द करने के रूप में आप पर ध्यान कोशिश कर सकते हैं, लेकिन यह काम बंद करने के लिए पृष्ठभूमि धागा से ही कुछ बातचीत की आवश्यकता है: "कार्यकर्ता कोड समय-समय पर जांच होनी चाहिए संपत्ति CancellationPending देखने के लिए अगर यह सही पर सेट किया गया है। "(ग) MSDN

आप एक धागा पर पूरा नियंत्रण की जरूरत है, तो आप Thread वर्ग का उपयोग कर खुद ही उसे बनाने के लिए होगा।

+0

सभी कोड स्रोत के साथ कोई अच्छा नमूना ?? धन्यवाद –

+0

थ्रेड, थ्रेड.एबॉर्ट, थ्रेड स्टार्ट पर चर्चा के लिए खोजें। –