2010-07-18 18 views
7

मेरे पास पृष्ठभूमि कार्यकर्ता में एक कार्य चल रहा है। स्टार्ट बटन पर क्लिक करने पर उपयोगकर्ता प्रक्रिया शुरू करता है और प्रसंस्करण को रद्द करने के लिए एक रद्द बटन प्राप्त कर लिया है।सी # पृष्ठभूमि कार्यकर्ता

जब उपयोगकर्ता रद्द करने पर क्लिक करता है, तो मैं एक संदेश बॉक्स दिखाना चाहता हूं कि "प्रक्रिया पूरी नहीं हुई है, क्या आप जारी रखना चाहते हैं"।

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

उत्तर

5

नहीं बनाया गया है। आप अपने कोड (प्रत्येक [एन] लूप पुनरावृत्तियों आदि पर) को ManualResetEvent की तरह कुछ जांच सकते हैं यह देखने के लिए कि क्या इसे चलाना चाहिए (साथ ही यह रद्दीकरण की जांच भी करता है)। मैं थ्रेड (Thread.Suspend) को निलंबित करने की अनुशंसा नहीं करता, क्योंकि आप नहीं जानते कि उस समय कौन से ताले आदि हो सकते हैं।

दूसरी तरफ ... इसे तक क्यों नहीं छोड़ा जाना चाहिए इसे रद्द करना चाहिए? फिर आपको रद्दीकरण की जांच करने की आवश्यकता है (इसके लिए एक ध्वज है) प्रत्येक [एन] पुनरावृत्तियों ...

+0

शायद प्रसंस्करण सीपीयू गहन है और प्रोग्रामर अस्थायी रूप से उपयोगकर्ता को अपने निर्णय लेने के दौरान संसाधनों को वापस लौटना चाहता है। –

+0

या पृष्ठभूमि प्रक्रिया कुछ अपरिवर्तनीय (फ़ाइलों को हटाने आदि) कर रही है, जो गलती से शुरू होने पर * जल्दी * बाधित होनी चाहिए। – Heinzi

2

यदि पृष्ठभूमिवर्कर किसी ऑब्जेक्ट पर काम कर रहा है जो दोनों धागे के लिए दृश्यमान है, तो आप उस ऑब्जेक्ट को 'लॉक' कर सकते हैं एक संवाद बॉक्स में प्रश्न का उत्तर देने के लिए उपयोगकर्ता की प्रतीक्षा करते हुए। इससे कार्यकर्ता के धागे को तब तक रोक दिया जाएगा जब तक संवाद-उत्पन्न थ्रेड लॉक समाप्त न हो जाए।

+0

यह केवल कार्यकर्ता को अवरुद्ध करेगा यदि कार्यकर्ता थ्रेड लगातार लॉक प्राप्त करने का प्रयास करता है और इसे रिलीज़ करता है। और यदि ** काम * हर बार इसे रिलीज़ नहीं करता है तो यह ** UI ** अवरुद्ध हो सकता है। –

+0

ठीक है, यह उस कार्यकर्ता पर निर्भर करेगा जिस पर कार्यकर्ता वस्तु का उपयोग करता है (जब/यदि लॉक अधिग्रहण/जारी किया जाता है)। लेकिन उपरोक्त शर्तों (पोस्ट और टिप्पणी में) के अनुसार कोई मौजूदा वस्तु का इलाज नहीं किया जाता है, लेकिन एक नई 'डमी' साझा वस्तु का उपयोग किया जा सकता है। – Assaf

संबंधित मुद्दे