2011-09-21 8 views
5

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

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

मैं कई परियोजनाओं के साथ एक समाधान है:

मैं कब्जे वाले स्मृति वहाँ रहना क्योंकि जब मैं इसे इस तरह से शुरू कर नई प्रक्रिया में दूसरी परियोजना उदाहरण शुरू करने की आवश्यकता,।

  • स्टार्टअप प्रोजेक्ट WPF ऐप है, आउटपुट प्रकार: विंडोज़ एप्लिकेशन (exe फ़ाइल)।
  • अन्य सभी परियोजनाएं डब्लूएफपी ऐप हैं, आउटपुट टाइप: क्लास लाइब्रेरी (डीएलएल फाइल)।

अब मैं "अनुप्रयोग" (अन्य परियोजनाओं यह एक dll के रूप में बनाया समाधान में) इस कोड से चला रहा हूँ:

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

मैं चाहता हूँ runnig है कि नई प्रक्रिया में क्षुधा ... आम तौर पर मैं करूंगा Process.Start() का उपयोग करें, लेकिन मैं इस मामले में नहीं हो सकता क्योंकि इसे एक्सई फाइल को एग्रीमेंट के रूप में चाहिए और मेरे पास डीएलएल है (और चाहते हैं)।

+1

क्या आप समझा सकते हैं कि दूसरी परियोजना क्या है? –

+1

कृपया अंग्रेजी को अद्भुत नहीं होने पर भी अधिक जानकारी जोड़ें, हम आपके लिए सबसे अच्छा करेंगे – Coops

+0

अन्य ऐप के अंदर दूसरा ऐप शुरू करने का प्रयास करना सही है? – Keeano

उत्तर

3

आप इसे 'उप-ऐप्स' चलाने के लिए कहने के लिए मुख्य .exe पर कमांड लाइन तर्क पास कर सकते हैं। फिर मुख्य .exe खुद को एक नई प्रक्रिया में लॉन्च कर सकता है और नया उदाहरण बता सकता है जो उप-ऐप चलाने के लिए है। तब

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     //See if exactly one command line argument was passed 
     if (e.Args.Length == 1) 
     { 
      //See if the argument is one of our 'known' values 
      switch (e.Args[0]) 
      { 
       case "launchApp2": 
        secondProject.WPFWindow win2 = new secondProject.WPFWindow(); 
        win2.Show(); 
        break; 
       case "launchApp3": 
        thirdProject.OtherWPFWindow win3 = new thirdProject.OtherWPFWindow(); 
        win3.Show(); 
        break; 
      } 
     } 

     //Probably want to call the base class always? 
     base.OnStartup(e); 
    } 
} 

किसी भी समय आप, तो आप इस तरह ऐसा कर सकते हैं एक नई प्रक्रिया में उप एप्लिकेशन में से एक लॉन्च करना चाहते हैं: मुख्य .exe अनुप्रयोग में उदाहरण के लिए, अपने आवेदन कक्षा में इस तरह तर्क डाल

public void LaunchApp2() 
{ 
    //Start a new process that is ourself and pass a command line parameter to tell 
    // that new instance to launch App2 
    Process.Start(Assembly.GetEntryAssembly().Location, "launchApp2"); 
} 
+0

बढ़िया! यह हो सकता है कि मैं क्या देख रहा हूं :) मैं इसे एएसएपी का परीक्षण करूंगा और मैं आपको बता दूंगा। – DefinitionHigh

+0

बहुत बहुत धन्यवाद! यह बात है! :) बीटीडब्ल्यू मैं बेस क्लास को हमेशा कॉल करने के लिए नहीं कहता हूं। – DefinitionHigh

+0

और कृपया, क्या मैं इस प्रक्रिया को किसी तरह से चिह्नित कर सकता हूं? उदाहरण के लिए प्रक्रिया विवरण सेट करके? मैं एक ही परियोजना के कई उदाहरणों को पूर्ववत करना चाहता हूं .. – DefinitionHigh

0

मान लीजिए कि आपके पास 2 परियोजनाओं के साथ समाधान है - एक प्रोजेक्ट एक अनुप्रयोग (EXE) के लिए संकलित करता है, जबकि दूसरा क्लास लाइब्रेरी (डीएलएल) में संकलित होता है। मुझे लगता है कि डीएलएल में कुछ प्रकार परिभाषित है (कहें, एक खिड़की) जिसे आप EXE से शुरू करना चाहते हैं।

ऐसा करने का सबसे आसान तरीका, बस डीएलएल का संदर्भ जोड़ना है। समाधान एक्सप्लोरर में EXE प्रोजेक्ट पर राइट-क्लिक करें, और चुनें संदर्भ जोड़ें ...। संवाद खुलते समय एक मिनट प्रतीक्षा करें। प्रोजेक्ट्स टैब से, डीएलएल प्रोजेक्ट का चयन करें। ओके पर क्लिक करें।

अब, आपके EXE प्रोजेक्ट में, WPFWindow आयातित प्रकार के रूप में उपलब्ध होगा। आप WPFWindow का उपयोग करता है प्रत्येक कोड फ़ाइल के शीर्ष करने के लिए एक

using secondProject;

जोड़ने की जरूरत है। मैं आमतौर पर कुंजीपटल शॉर्टकट CTRL + अवधि का उपयोग करके स्वचालित रूप से ऐसा करता हूं।

मैंने जिस विधि का वर्णन किया है वह सी # में डीएलएल का उपयोग करने का मानक तरीका है। आप उन्हें मैन्युअल रूप से लोड कर सकते हैं, लेकिन यह थोड़ा अधिक जटिल है, और संभवतः वह नहीं है जो आप करना चाहते हैं।

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

अलेक्सई सही है। मुझे लगता है कि हमारे पास यहाँ क्या है XY Problem। आप जो करने की कोशिश कर रहे हैं वह शायद बहुत आसान है, लेकिन दृष्टिकोण (डीएलएल में परिभाषित विंडो को तत्काल करना) नहीं है।

ध्यान रखें कि आपके द्वारा चलाए जाने वाले किसी भी कोड (आपके मामले में, आपके WPFWindow) को किसी एप्लिकेशन से उत्पन्न होना है, भले ही कोड स्वयं डीएलएल में परिभाषित किया गया हो। एक डीएलएल स्वयं सामान्य रूप से ऑपरेटिंग सिस्टम को चलाने के लिए किसी भी कोड के बारे में जानकारी नहीं देता है।

एक और EXE प्रोजेक्ट जोड़ने पर विचार करें जो आपके WPFWindow चलाता है जिसे आप Process का उपयोग करके कॉल करते हैं।यह सुझाव गलत हो सकता है, हालांकि, हम अभी भी नहीं जानते कि आपका अंतिम लक्ष्य क्या है। आप पूछ रहे हैं "मैं अपने पंखों को एक पक्षी की तरह कैसे फिसल सकता हूं?" जब सही सवाल हो सकता है "मैं विमान टिकट कैसे खरीदूं?"

+1

यह पहले से ही किया गया था। मुझे पता है कि प्रोजेक्ट 2 से एप कैसे चलाएं। यह इस कोड द्वारा किया गया है: दूसरा प्रोजेक्ट। पीएफएफ विन्डो जीत = नया दूसरा प्रोजेक्ट। पीएफएफविंडो(); जीत। शो(); क्या कोई यह समझ सकता है कि मुझे यह तरीका मिल रहा है कि इसे नई प्रक्रिया में कैसे चलाया जाए? – DefinitionHigh