2012-10-02 14 views
6

¿Cómo puedo acceder y ejecutar una aplicación de consola desde un formulario de Windows, que es parte del mismo proyecto. Tengo un formulario de Windows y una aplicación de consola. Creo que puedo publicar la aplicación de la consola y luego usar Process.Start(path to console app), pero esto no es lo que quiero. Deseo acceder y usar el método Main de la aplicación de consola en mi proyecto de formulario. Este método se ejecutaría con un clic en un botón.Llamando al método `Principal` de una aplicación de consola desde una aplicación de formulario (mediante un clic de evento)

Esto produce el siguiente error.

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

Éstos son los métodos.

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

No está claro lo que espera que suceda. Usted dice que no desea iniciar la aplicación de la consola como un proceso independiente, pero si invoca el método tal como está, obviamente no funcionará porque no está en una aplicación de consola. ¿Cómo se esperaría que 'Console.ReadKey()' se comporte en una aplicación WinForms? – Tudor

+0

@Tudor Supongo que esa consola.ReadKey() no hará mucho en un formulario. De acuerdo, entonces no es posible que la aplicación de formulario llame a la aplicación de la consola abriendo otro proceso, que vendría del método principal de la aplicación de consola a la que se llama. – somethingSomething

+0

@Tudor Cuando escribí la aplicación formulario formulario control de formulario (un botón) – somethingSomething

Respuesta

7

Si usted necesita para ejecutar su aplicación de consola sin aplicación WinForms, ya veces se desea ejecutar algún código de la consola sin correr una aplicación de consola, me tiene una sugerencia para usted:

Puede dividir su solución en tres partes.

  1. WinForms parte
  2. parte
  3. consola
  4. biblioteca DLL.

Enlace un dll al primero y al segundo proyecto.

Entonces, si usted necesita para ejecutar código compartido del WinFomrs aplicación, se puede hacer:

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

SharedClass se implementarán en el tercer proyecto. Puedes llamarlo desde la aplicación de la consola también.


UPD

Proyecto 1: ClassLibrary.

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

Proj 2. WinForms. Tiene una referencia al Proyecto 1

usando Compartido;

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. Aplicación de consola

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

yo sólo he comprobado - funciona.

+0

me gané por 1 minuto ... + 1 por dar con la misma respuesta :) –

+0

¿No es posible ejecutar una aplicación de consola desde ¿formar? Cuando utilizo ClassLibrary, aparece el mismo error "InvalidOperationException no fue manejada. No se pueden leer las claves cuando ninguna aplicación tiene una consola o cuando la entrada de la consola se redirigió desde un archivo. Pruebe Console.Read". Puedo usar el código System.Diagnostics.Process.Start (Path-to-exeFile) pero solo quería decir una biblioteca o un código que inicie la aplicación de la consola cuando presiono un botón en un formulario. – somethingSomething

+0

Si usa WinForms, ¿por qué usa Console.Read? –

Cuestiones relacionadas