2012-10-02 9 views
6

Come posso accedere ed eseguire un'applicazione console da un Windows Form, che fa parte dello stesso progetto. Ho un modulo di Windows e un'applicazione di console. Penso di poter pubblicare l'applicazione console e quindi utilizzare Process.Start(path to console app) ma questo non è quello che voglio. Voglio accedere e utilizzare il metodo Main dell'applicazione console nel mio progetto modulo. Questo metodo dovrebbe essere eseguito con un clic su un pulsante.chiamata `metodo Main` di un'applicazione console da un'applicazione modulo (da un evento di scatto del tasto)

Questo dà il seguente errore.

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(); 
} 

Questi sono i metodi.

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

Non è chiaro cosa ti aspetti che accada. Si dice che non si desidera avviare l'applicazione della console come processo autonomo, ma se si richiama il metodo così com'è, ovviamente non funzionerà perché non ci si trova in un'applicazione della console. Come ti aspetteresti che 'Console.ReadKey()' si comporti in un'app WinForms? – Tudor

+0

@Tudor suppongo che sia Console.ReadKey() non avrebbe fatto molto su un modulo. OK, non è possibile per l'app form chiamare l'app della console che apre un altro processo, che verrebbe dal metodo principale della chiamata alla console. – somethingSomething

+0

@Tudor Quando ho scritto il modulo di controllo app modulo (un pulsante) – somethingSomething

risposta

7

Se è necessario eseguire la console app senza WinForms app, e, a volte si desidera eseguire del codice della console senza correre una console app, ho hai un suggerimento per te:

Puoi dividere la tua soluzione in tre parti.

  1. WinForms parte
  2. Console parte
  3. libreria DLL.

Collegare una DLL al primo e al secondo progetto.

Poi, se avete bisogno di eseguire codice condiviso da WinFomrs app, si può fare:

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

SharedClass saranno effettuate nell'ambito del terzo progetto. Puoi anche chiamarlo dall'app console.


upd

Progetto 1: ClassLibrary.

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

Proj 2. WinForms. Ha un riferimento al progetto 1

utilizzando Shared;

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. Console App

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(); 
     } 
    } 

Ho appena controllato - funziona.

+0

mi ha battuto per 1 minuto ... + 1 per avere la stessa risposta :) –

+0

Non è possibile eseguire un'app console da un modulo? Quando utilizzo una classeLibrary, si verifica lo stesso errore "InvalidOperationException non gestita Impossibile leggere le chiavi quando un'applicazione non ha una console o quando l'input della console è stato reindirizzato da un file. Prova Console.Read." Posso usare il codice System.Diagnostics.Process.Start (Path-to-exeFile) ma volevo solo dire una libreria o un codice che lanciasse l'app della console quando premo un pulsante su un modulo. – somethingSomething

+0

Se usi WinForms, perché usi Console.Read? –

Problemi correlati