2010-03-12 13 views
6

के साथ विशिष्ट फ़ाइल एक्सटेंशन कैसे खोलें मैं नेट कॉम्पैक्ट फ्रेमवर्क में एक मोबाइल एप्लिकेशन विकसित कर रहा हूं। मैं रजिस्ट्री HKEY_CLASSES_ROOT को संपादित करने में कामयाब रहा ताकि .xyz एक्सटेंशन वाली फ़ाइल पर क्लिक मेरे एप्लिकेशन को खोल देगा। असल में, मुझे क्लिक होने पर इस फ़ाइल पर कुछ ऑपरेशन करने की आवश्यकता है।सी # सीएफ: मेरे प्रोग्राम

हालांकि, मुझे एहसास है कि अगर मैं पहली बार ऐसा करता हूं, तो यह static void Main पर प्रोग्राम.cs तक पहुंचता है। लेकिन जब प्रोग्राम चल रहा है और मैं फिर से .xyz एक्सटेंशन के साथ फ़ाइल पर क्लिक करता हूं, तो यह प्रोग्राम static void Main लोड नहीं करता है। मैंने वर्तमान में चल रहे फॉर्म पर ब्रेकपॉइंट्स सेट करने का प्रयास किया लेकिन अभी भी कुछ नहीं।

तो यह कहां जाता है? मैं फ़ाइल का पता कैसे लगा सकता हूं। Xyz क्लिक किया गया है और कुछ करें?

उत्तर

0

क्या आपके पास मुख्य में स्ट्रिंग तर्क हैं?

static void Main(string[] args) 
+0

हाय, त्वरित उत्तर के लिए Tks। मैंने कनवर्ट करके कमांड लाइन तर्क की अनुमति दी है: 'स्थिर शून्य मुख्य() { एप्लिकेशन। रुन (नया मुख्य()); } ' इस ' स्थिर शून्य मुख्य (String [] args) को { अगर (args.Length = 0!) MessageBox.Show ("सरणी लेन = 0!"); बाकी MessageBox.Show ("सरणी लेन = 0"); आवेदन। रुन (नया मुख्य()); } ' लेकिन अभी भी जब कार्यक्रम चल रहा है और मैं एक .xyz फाइल एक्सटेंशन खोलते हैं, तो मुख्य बिल्कुल नहीं पहुँच जाएगा। – nuttynibbles

+0

हम्म, हाँ यह कठिन हो सकता है। यदि आप चल रहे हैं तो फ़ाइलों को प्रोग्राम में खींच और छोड़ सकते हैं (http://stackoverflow.com/questions/68598/how-do-i-drag-and-drop-files-into-c)। मुझे पता है कि शायद पसंद नहीं है। – SwDevMan81

+0

जब प्रोग्राम चालू नहीं होता है और पहली बार शुरू होता है तो यह केवल मुख्य (स्ट्रिंग [] तर्क) तक पहुंचता है। जब मेरा प्रोग्राम इसके फॉर्म और सभी के साथ चल रहा है, और जब मैं फ़ाइल पर क्लिक करता हूं, तो यह मेरे वर्तमान फॉर्म को खोलता है जो चल रहा है (उदाहरण के लिए: सेटिंग फॉर्म)। मुझे यकीन नहीं है कि यह सही दृष्टिकोण है या नहीं। इस ऑपरेशन को संभालने के लिए मेरे मुख्य कार्यक्रम का उपयोग करने के लिए। मूल रूप से मेरे मुख्य कार्यक्रम में सभी जीयूआई और अन्य सुविधाएं हैं। – nuttynibbles

0

आपकी समस्या यह है कि आप static void Main लिए देख रहे हैं फिर से के नाम से जाना है, जो एक Static Constructor है। स्टेटिक कन्स्ट्रक्टर केवल एक बार बुलाए जाते हैं। उन्हें कक्षा से पहले बुलाया जाता है (इस मामले में आपका प्रोग्राम) शुरू किया जाता है, फिर कभी नहीं। उन्हें आपके कार्यक्रम के प्रत्येक नए उदाहरण के लिए बुलाया नहीं जाता है ..

+0

यह कॉल नहीं किया जा रहा है, क्योंकि ऐप पहले ही चल रहा है। – ctacke

+0

अच्छा बिंदु। मुझे लगता है कि इसे एक वर्ग के समान माना जाएगा। –

2

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

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

इस काम करने के लिए पाने के लिए आपको कुछ बातें क्या करना है:

  1. Subvert the CF's attempt to make your app a sinlgeton ताकि आप कर सकते हैं रन कई उदाहरण।
  2. ऐप में एक म्यूटेक्स रखें ताकि आप यह जान सकें कि आप पहले से चल रहे हैं या नहीं।
  3. बाद के उदाहरणों से आने वाले पैरामीटर सुनने के लिए जल्दी ही एक थ्रेड स्पॉन करें। जब पैरामीटर आते हैं, तो अपने आप को सामने लाएं और पैरामीटर को उचित तरीके से संभाल लें।
  4. स्टार्टअप पर, यदि म्यूटेक्स पहले ही लिया जाता है (यानी ऐप पहले से चल रहा है), मौजूदा ऐप के श्रोता धागे को भेजने के लिए आईपीसी (पॉइंट-टू-पॉइंट कतार एक अच्छा तरीका है) का उपयोग करें (देखें # 3) अपने पैरामीटर और फिर बस छोड़ दिया।
+0

# 1 एक महान चाल है और हुड के नीचे क्या हो रहा है इसका एक बड़ा स्पष्टीकरण है। मुझे बहुत खुशी है कि मेरे सहकर्मियों ने कभी भी उस लेख को नहीं पढ़ा, किसी भी आवेदन के अपेक्षित व्यवहार को बदलने वाले किसी भी चीज़ के लिए उनका प्यार दिया। :) – MusiGenesis

1

आप कहते हैं कि आप एक फ़ाइल पर कुछ आपरेशन हर बार क्लिक करते ही प्रदर्शन करने के लिए की जरूरत है। मुझे लगता है कि यह कुछ GUI- संबंधित है, जैसे कि आप डबल-क्लिक होने पर फ़ाइल के गुण दिखाना चाहते हैं।

अपने कार्यक्रम मान लिया जाये कि एक मुख्य रूप है, आप false करने के लिए अपने MinimizeBox गुण सेट कर सकता है और इसके Deactivate घटना में this.Close(); डाल दिया। इस तरह, जब आप सही प्रकार की फ़ाइल पर क्लिक करते हैं, तो आपका एप्लिकेशन कमांड लाइन तर्क शुरू और पढ़ेगा और फ़ाइल विवरण प्रदर्शित करेगा। यदि उपयोगकर्ता ऊपरी दाएं भाग में ओके बटन के साथ आपके ऐप को बंद कर देता है, तो यह वास्तविक के लिए बंद हो जाएगा ताकि अगली बार जब यह खुलता है तो यह एक नया उदाहरण खुल जाएगा और कमांड लाइन को ठीक से तर्क देगा। या, यदि उपयोगकर्ता WinMo में किसी अन्य प्रोग्राम पर नेविगेट करता है, तो आपके एप्लिकेशन की Deactivate ईवेंट ऐप बंद कर देगा।किसी भी तरह से, ऐप हमेशा खुला रहता है और शीर्ष पर, या पूरी तरह से बंद होता है, इसलिए फ़ाइल एक्सप्लोरर में फ़ाइल पर क्लिक करने से हमेशा एक नया उदाहरण खुल जाएगा।

+0

बॉक्स के बाहर सोच रहा है। अच्छी तरह से किया (हालांकि मैं सीएफ में स्टार्टअप समय के कारण इसे बंद नहीं करना चाहूंगा)। – ctacke

+0

@ctacke: धन्यवाद, और मेरे नवीनतम पसंदीदा मजाक का उपयोग करने के अवसर के लिए भी धन्यवाद: "मुझे बॉक्स के बाहर नहीं लगता है, मेरे पास बस एक बड़ा बॉक्स है।" :) – MusiGenesis

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