5

मैं विजुअल स्टूडियो 2010 में फ्रेमवर्क 4.0 के साथ सी # का उपयोग कर रहा हूं।प्रत्येक बार जब मैं विजुअल स्टूडियो को खोलता हूं तो फाइलसिस्टम वाटर सक्षमरएज़इवेन्ट

मेरी परियोजना में, दो अलग-अलग रूपों में, एस संपत्ति EnableRaisingEventfalse पर सेट है। अगर मैं विजुअल स्टूडियो को बंद करता हूं, जब मैं इसे फिर से खोलता हूं तो मुझे FileSystemWatcher दोनों में मिलता है EnableRaisingEventtrue पर सेट करें।

डिजाइनर फ़ाइल में मेरे दोनों रूपों में निम्नलिखित कोड है:

private void InitializeComponent() 
{ 
    this.components = new System.ComponentModel.Container(); 
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 
    this.fileSystemWatcher1 = new System.IO.FileSystemWatcher(); 
    ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit(); 
    this.SuspendLayout(); 

    this.fileSystemWatcher1.Filter = "my_filter"; 
    this.fileSystemWatcher1.NotifyFilter = System.IO.NotifyFilters.LastWrite; 
    this.fileSystemWatcher1.SynchronizingObject = this; 
    this.fileSystemWatcher1.Changed += new System.IO.FileSystemEventHandler(this.fileSystemWatcher1_Changed); 
} 

संपत्ति EnableRaisingEvent सेट नहीं है, लेकिन डिफ़ॉल्ट false है।

कोई विचार मुझे यह अजीब व्यवहार क्यों मिलता है?

संपादित

मैं Virtlink के सुझाव का पालन किया, कोड की निम्न पंक्ति जोड़ने:

this.fileSystemWatcher1.EnableRaisingEvents = false; 

यह मेरी समस्या का समाधान करने के लिए लग रहा था, लेकिन कुछ ही दिन (और कुछ खोलने, बंद करने के बाद और इस परियोजना के पुनर्निर्माण, लेकिन fileSystemWatcher1 को संशोधित किए बिना) मैंने पाया:

  • डिजाइनर में , fileSystemWatcher1 के गुणों में, EnableRaisingEvents वापस true

  • करने के लिए कोड में स्थापित किया गया था, पूर्व में जोड़े लाइन

याद आ रही थी मैं दृश्य स्टूडियो 2012 (अभी भी ढांचा 4.0) में जाने की कोशिश की और कामकाज ने कुछ और दिनों के लिए समस्या तय की। तब मुझे वही स्थिति मिली जैसे वीएस 10 में।

कोई अन्य विचार?

+0

क्या आप पुष्टि कर सकते हैं, आपने वर्टलिंक के सुझाव 'this.fileSystemWatcher1.EnableRaisingEvents = false;' जोड़ा अपनी Form.cs फ़ाइल के निर्माता में? –

+0

@jacobaloysious मैंने किया, और ऐसा लगता है कि इस मुद्दे को ठीक किया गया है! धन्यवाद, – 888

उत्तर

2

यह विजुअल स्टूडियो 2012 में भी होता है, और आपको विजुअल स्टूडियो को बंद करने की आवश्यकता नहीं है। प्रपत्र डिजाइनर को फिर से खोलना संपत्ति को True पर सेट करने के लिए पर्याप्त है, दोनों डिजाइनर और रन-टाइम में दृष्टि से।

यह FileSystemWatcher में एक बग प्रतीत होता है।

का संभावित हल अपने InitializeComponent स्पष्ट रूप से करने के लिए इस लाइन को जोड़ने के लिए है:

this.fileSystemWatcher1.EnableRaisingEvents = false; 

डिजाइनर साथ काम नहीं करेंगे आप, आप इसे के खिलाफ काम करना होगा। InitializeComponent में डाले गए कुछ भी डिजाइनर द्वारा अधिलेखित या हटाए जा सकते हैं, क्योंकि InitializeComponent डिज़ाइनर का क्षेत्र है। इस से निपटने का एक तरीका है के बाद लाइन को InitializeComponent पर अपने फॉर्म के कन्स्ट्रक्टर में कॉल करना है।

InitializeComponent(); 
this.fileSystemWatcher1.EnableRaisingEvents = false; 

इसका मतलब यह है डिजाइनर होगा नहीं आप EnableRaisingEvents के लिए सही मान दिखाने के लिए, लेकिन यह सब है कि अच्छी तरह वैसे भी काम नहीं किया क्योंकि कि इतनी बड़ी समस्या नहीं हो सकता। कन्स्ट्रक्टर में लाइन डालने से यह सुनिश्चित होता है कि भविष्य में किसी भी बिंदु पर डिजाइनर द्वारा इसे हटाया नहीं जा सके।

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      this.fileSystemWatcher1.EnableRaisingEvents = false; 
     } 
    }  

यहां कुछ और कारणों से मैं क्यों तुम चाहिए नहीं (कभी) अपने डिजाइनर संपादित पर रक्षा करने के लिए बाहर मिल सकता है:

+0

आपके सुझावों के लिए धन्यवाद। अब यह हल हो रहा है! – 888

1

अब मुझे इस उत्तर को स्वीकार करने की उम्मीद नहीं है, लेकिन यहां वैसे भी चला जाता है। मैंने एक छोटा प्री-प्रोसेसर प्रोग्राम लिखा है जो विजुअल स्टूडियो प्रोजेक्ट में सी # स्रोत फ़ाइलों को पढ़ता है और संशोधित करता है और कुछ रोचक चीजें करता है, जैसे कुछ स्थानीयकरण सेवाएं प्रदान करना और मेरे लॉगिंग स्टेटमेंट में अद्वितीय लॉग टोकन डालना। यह प्रीप्रोसेसर प्रोग्राम मेरे सभी .csproj फ़ाइलों में पहलेबिल्ड लक्ष्य द्वारा लागू किया जाता है, इसलिए यह प्रत्येक संकलन के हिस्से के रूप में चलाया जाता है।

मैं वर्तमान में designer.cs फ़ाइलों के साथ झुकाव नहीं कर रहा हूं, लेकिन मैं .resx फ़ाइलों को संशोधित कर रहा हूं, और उनके पास विजुअल स्टूडियो डिजाइनर के अनुपालन में एक ही दुर्भाग्यपूर्ण विशेषता है, इसलिए जब भी मैं संशोधित करता हूं तो मेरे संशोधनों को छोड़ दिया जाता है। एक फॉर्म बदलें, लेकिन फिर मेरा प्रीप्रोसेसर प्रोग्राम सिर्फ .resx फ़ाइल को फिर से संशोधित करता है। जब भी विजुअल स्टूडियो डिजाइनर ने इसे छोड़ दिया है, तो EnableRaisingEvents को झूठी करने के लिए उस कथन को पुन: सम्मिलित करने के लिए यह वही प्रक्रिया होगी।

यह थंबटेक को जगह में रखने के लिए एक स्लेजहैमर का उपयोग करेगा, लेकिन यह काम करेगा।

संपादित करें:

जो कोई भी इस या इसी तरह की समस्याओं को हल करने के लिए एक तकनीक के रूप में इस लागू करने पर विचार करता है के लिए, यह धागा कैसे बनाने के लिए पर सुझाव के एक जोड़े में शामिल है दृश्य स्टूडियो एक पूर्वप्रक्रमक के साथ सह-अस्तित्व में: How to get Visual Studio to reread source files after BeforeBuild processing?

1

मैं, उदाहरण के कोड में आवश्यक लाइन जोड़ने पर Virtlink सुझाव के साथ जाने के .cs

आप हेरेनवार्डो टिप्पणी Here से अधिक जानकारी प्राप्त कर सकते हैं। यहां एक संक्षिप्त विवरण है ..

एक संपादन .esigner.cs (या Visual Basic में Designer.vb) फ़ाइल को कभी भी सलाह नहीं दी जाती है, इससे कोई फर्क नहीं पड़ता कि आप इसे क्यों संपादित करना चाहते हैं; और यह लगभग कभी जरूरत नहीं है। वहाँ दो मुख्य कारण उन फ़ाइलों को संपादित करके unadvisable हैं जाता है:

  1. आईडीई बहुत कठोर कोडिंग सम्मेलनों के साथ इन फ़ाइलों लिखते हैं, और उन्हें उम्मीद है ऐसे सम्मेलनों (रिक्ति और tabbing की तरह सामान का पालन करने के मुद्दों को उठाने नहीं होगा, लेकिन कुछ भी जो फ़ाइल की संरचना या कोड के पार्स पेड़ को बदलता है, वह बहुत साइड इफेक्ट्स के समान है)।
  2. आईडीई के बिना भी आपको बताए बिना कई स्थितियों में आपके परिवर्तनों को ओवरराइट कर सकता है। आम तौर पर, किसी प्रपत्र या उपयोगकर्ता नियंत्रण के । डिज़ाइनर फ़ाइल के लिए, जब भी आप डिज़ाइनर से बदलते हैं तो फ़ाइल ओवरराइट की जाती है। सेटिंग्स फ़ाइलों के लिए (मेरे पास इनके साथ बहुत अधिक अभ्यास नहीं है), मुझे लगता है कि जब आप आईडीई से (0 प्रोजेक्ट गुणों 'सेटिंग्स पृष्ठ से) सेटिंग संपादित करते हैं तो उन्हें फिर से लिखा जाता है। सुरक्षित होने का सबसे आसान तरीका यह है कि आईडीई किसी भी कारण से किसी भी समय । डिज़ाइनर फ़ाइल बदल सकता है।इसके बावजूद परिभाषित किया गया है कि आईडीई प्रत्येक फ़ाइल को कब लिखता है, यह के लिए काफी कठिन हो सकता है और याद रखें कि प्रत्येक फ़ाइल कब और क्यों रीमेड की जा सकती है, इसलिए क्षमा से सुरक्षित है।
+0

अनुशंसित नहीं होने पर, आप फ़ाइल की संरचना को संरक्षित करते समय, डिज़ाइनर फ़ाइलों को संपादित कर सकते हैं। उदाहरण के लिए, एक ईवेंट हैंडलर को निकालना आम है, और थोड़ा कम आम है लेकिन डिज़ाइनर ने इसे सेट किया है तो एक मूल्य _as जोड़ने के लिए संभव है। दोनों आमतौर पर डिजाइनर के माध्यम से भी हासिल किए जा सकते हैं, इसलिए संपादित करने की कोई आवश्यकता नहीं है। – Virtlink