2009-10-26 17 views
5

Me gustaría crear un formulario de Windows desde la consola usando C#. Aproximadamente como display lo hace en Linux, y modifica sus contenidos, etc. ¿Es eso posible?Windows desde la consola

Respuesta

6

usted debería ser capaz de añadir una referencia para System.Windows.Forms y luego ser bueno para ir. También puede tener que aplicar STAThreadAttribute al punto de entrada de su aplicación.

using System.Windows.Forms; 

class Program 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     MessageBox.Show("hello"); 
    } 
} 

... más compleja ...

using System.Windows.Forms; 

class Program 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     var frm = new Form(); 
     frm.Name = "Hello"; 
     var lb = new Label(); 
     lb.Text = "Hello World!!!"; 
     frm.Controls.Add(lb); 
     frm.ShowDialog(); 
    } 
} 
4

Sí, puede inicializar un formulario en la consola. Añadir una referencia a System.Windows.Forms y utilizar el siguiente código de ejemplo:

System.Windows.Forms.Form f = new System.Windows.Forms.Form(); 
f.ShowDialog(); 
+0

¿Puedo obtener algunos comentarios sobre los downmods? –

+0

¿Por qué se bajó este voto? Puede que no sea una gran práctica, pero definitivamente es posible. –

+0

¿Funcionará esto sin el atributo STAThread? –

1

Puede probar este

using System.Windows.Forms; 

[STAThread] 
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.Run(new MyForm()); 
} 

adiós.

4

La respuesta común:

[STAThread] 
static void Main() 
{  
    Application.Run(new MyForm()); 
} 

Alternativas (tomado de here) si, por ejemplo - que quiere poner en marcha una forma de un hilo que no sea el de la aplicación principal:

Thread t = new Thread(new ThreadStart(StartNewStaThread)); 

// Make sure to set the apartment state BEFORE starting the thread. 
t.ApartmentState = ApartmentState.STA; 
t.Start(); 

private void StartNewStaThread() { 
    Application.Run(new Form1()); 
} 

.

Thread t = new Thread(new ThreadStart(StartNewStaThread)); 
t.Start(); 

[STAThread] 
private void StartNewStaThread() { 
    Application.Run(new Form1()); 
} 
Cuestiones relacionadas