2012-10-02 1 views
6

मैं एक प्रोजेक्ट का हिस्सा है जो विंडोज प्रपत्र से कंसोल एप्लिकेशन को कैसे एक्सेस और चला सकता है। मेरे पास एक विंडोज़ फॉर्म और कंसोल एप्लीकेशन है। मुझे लगता है कि मैं कंसोल एप्लिकेशन प्रकाशित कर सकता हूं और फिर Process.Start(path to console app) का उपयोग कर सकता हूं लेकिन यह वही नहीं है जो मैं चाहता हूं। मैं अपने फॉर्म प्रोजेक्ट में कंसोल एप्लिकेशन की Main विधि का उपयोग और उपयोग करना चाहता हूं। यह विधि एक बटन पर एक क्लिक पर चलती है।एक फॉर्म एप्लिकेशन से कंसोल एप्लिकेशन की 'मुख्य' विधि को कॉल करना (बटन क्लिक ईवेंट द्वारा)

यह निम्न त्रुटि देता है।

InvalidOperationException was unhandled Cannot read keys when either application does not have a console or when console input has been redirected from a file. Try Console.Read.

private void buttonApplication_Click(object sender, EventArgs e) 
{ 
    Ch15Extra_2.Program.Main(); 
} 

यहाँ तरीके हैं।

ConsoleApp:

namespace Ch15Extra_2 
{ 
    public class Program 
    { 
    public static void Main() 
    { 
     Console.WriteLine("Here the app is running"); 
     Console.ReadKey(); 
    } 
    } 
} 

Form1:

private void buttonApplication_Click(object sender, EventArgs e) { } 
+2

यह स्पष्ट नहीं है कि आप क्या होने की उम्मीद करते हैं। आप कहते हैं कि आप कंसोल एप्लिकेशन को स्टैंड-अलोन प्रक्रिया के रूप में शुरू नहीं करना चाहते हैं, लेकिन यदि आप इस तरह की विधि का आह्वान करते हैं, तो जाहिर है कि यह काम नहीं करेगा क्योंकि आप कंसोल एप्लिकेशन में नहीं हैं। WinForms ऐप में व्यवहार करने के लिए आप 'Console.ReadKey()' से कैसे अपेक्षा करेंगे? – Tudor

+0

@ ट्यूडर मुझे लगता है कि कंसोल।ReadKey() एक रूप पर ज्यादा नहीं किया था। ठीक है, तो फॉर्म ऐप के लिए एक और प्रक्रिया खोलने के लिए कंसोल ऐप को कॉल करना संभव नहीं है, जो कंसोल ऐप के मुख्य तरीके से आ जाएगा। – somethingSomething

+0

@Tudor जब मैं प्रपत्र अनुप्रयोग लिखा था मैं प्रपत्र नियंत्रण (एक बटन) – somethingSomething

उत्तर

7

आप WinForms अनुप्रयोग के बिना अपने कंसोल अनुप्रयोग चलाने के लिए की जरूरत है, और कभी कभी आप एक सांत्वना अनुप्रयोग चलने के बिना कुछ सांत्वना कोड निष्पादित करने के लिए चाहते हैं, तो मैं आपके लिए एक सुझाव है:

आप अपने समाधान को तीन भागों में विभाजित कर सकते हैं।

  1. WinForms हिस्सा
  2. कंसोल हिस्सा
  3. Dll पुस्तकालय।

पहले और दूसरी परियोजनाओं के लिए एक डीएलएल लिंक करें।

तो अगर आप WinFomrs app से साझा कोड चलाने की आवश्यकता है, तो आप कर सकते हैं:

private void buttonApplication_Click(object sender, EventArgs e) 
{ 
    var shared = new SharedClass(); 
    shared.Run(); 
} 

SharedClass तीसरे परियोजना में लागू किया जाएगा। आप इसे कंसोल ऐप से भी कॉल कर सकते हैं।


upd

परियोजना 1: ClassLibrary।

public class SharedClass 
{ 
    public int DoLogic(int x) 
    { 
     return x*x; 
    } 
} 

प्रोज 2. WinForms। परियोजना का संदर्भ 1

साझा किए गए का उपयोग कर;

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     TextBox textBox = new TextBox(); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      var shared = new SharedClass(); 
      textBox.Text = shared.DoLogic(10).ToString(); 
     } 
    } 
} 

proj 3. कंसोल अनुप्रयोग

public class Program 
    { 
     public static void Main() 
     { 
      Console.WriteLine("Here the app is running"); 
      var shared = new Shared.SharedClass(); 
      Console.WriteLine(shared.DoLogic(10)); 
      Console.ReadKey(); 
     } 
    } 

मैं बस देख लिया है - यह काम करता है।

+0

1 मिनट ... + 1 से इसे करने के लिए मुझे हरा ही जवाब :) –

+0

के साथ आ के लिए यह एक से एक सांत्वना अनुप्रयोग चलाने के लिए संभव नहीं है ment प्रपत्र? जब मैं एक classLibrary का उपयोग एक ही त्रुटि है "InvalidOperationException बिना क्रिया चाबियाँ पढ़ा नहीं जा सकता या तो आवेदन एक सांत्वना नहीं है जब या जब कंसोल इनपुट एक फ़ाइल से पुनः निर्देशित किया गया है। Console.Read प्रयास करें था।" मैं कोड System.Diagnostics.Process.Start उपयोग कर सकते हैं (पथ-टू-exeFile), लेकिन मैं सिर्फ इतना कहना एक पुस्तकालय या एक कोड है कि कंसोल एप्लिकेशन लॉन्च होगा जब मैं एक फार्म पर एक बटन दबाते हैं करना चाहते थे। – somethingSomething

+0

यदि आप WinForms का उपयोग करते हैं - आप कंसोल का उपयोग क्यों करते हैं। पढ़ें? –