Всего при использовании нескольких потоков для кроме размораживания настольных приложений и какого-либо другого универсального ответа Вы сделаете приложение медленнее , если у Вас будет одноядерная машина из-за потоков, прерывающих друг друга.
, Почему? Из-за аппаратных переключателей. Это занимает время для аппаратных средств для переключения между потоками всего. На многоядерном поле разрешении и использовании 1 поток для каждого ядра и Вы будете значительно видеть подъем.
Вы должны иметь возможность добавить ссылку на System.Windows.Forms, и тогда все будет в порядке. Возможно, вам также придется применить атрибут STAThreadAttribute к точке входа вашего приложения.
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main(string[] args)
{
MessageBox.Show("hello");
}
}
... более сложный ...
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();
}
}
Да, вы можете инициализировать форму в консоли. Добавьте ссылку на System.Windows.Forms и используйте следующий пример кода:
System.Windows.Forms.Form f = new System.Windows.Forms.Form();
f.ShowDialog();
Вы можете попробовать это
using System.Windows.Forms;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
Пока.
Общий ответ:
[STAThread]
static void Main()
{
Application.Run(new MyForm());
}
Альтернативы (взяты из здесь ), если, например - вы хотите запустить форму из потока, отличного от потока основного приложения :
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());
}