2009-10-26 4 views

Odpowiedz

6

powinieneś móc dodać odwołanie do System.Windows.Forms a potem być dobry, aby przejść. Możesz również zastosować STAThreadAttribute do punktu wejścia swojej aplikacji.

using System.Windows.Forms; 

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

... bardziej skomplikowane ...

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

Tak, możesz zainicjować formularz w konsoli. Dodaj odwołanie do System.Windows.Forms i stosować następujące przykładowy kod:

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

Czy mogę uzyskać komentarze na temat downmods? –

+0

Dlaczego zostało to odrzucone? To może nie być świetna praktyka, ale na pewno jest to możliwe. –

+0

Czy to działa bez atrybutu STAThread? –

1

Można spróbować tej

using System.Windows.Forms; 

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

Bye.

4

Wspólna odpowiedź:

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

Alternatywy (zaczerpnięte z here) jeżeli, na przykład - chcesz uruchomić formularz z wątku innego niż głównego aplikacji:

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