Форма Windows от консоли

  1. На единственной машине процессора и настольном приложении, Вы используете много потоки, таким образом, Вы не замораживаете приложение, но ни для чего иного действительно.
  2. На однопроцессорном сервере и веб-приложении, никакой потребности во много поточной обработке, потому что веб-сервер обрабатывает большую часть из него.
  3. На многопроцессорной машине и настольном приложении, Вам предлагают использовать много потоки и параллельное программирование. Сделайте столько же потоков, сколько существуют процессоры.
  4. На многопроцессорном сервере и веб-приложении, никакая потребность снова во много потоках, потому что веб-сервер обрабатывает его.

Всего при использовании нескольких потоков для кроме размораживания настольных приложений и какого-либо другого универсального ответа Вы сделаете приложение медленнее , если у Вас будет одноядерная машина из-за потоков, прерывающих друг друга.

, Почему? Из-за аппаратных переключателей. Это занимает время для аппаратных средств для переключения между потоками всего. На многоядерном поле разрешении и использовании 1 поток для каждого ядра и Вы будете значительно видеть подъем.

5
задан Dervin Thunk 26 October 2009 в 20:03
поделиться

4 ответа

Вы должны иметь возможность добавить ссылку на 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();
    }
}
6
ответ дан 18 December 2019 в 11:58
поделиться

Да, вы можете инициализировать форму в консоли. Добавьте ссылку на System.Windows.Forms и используйте следующий пример кода:

System.Windows.Forms.Form f = new System.Windows.Forms.Form(); 
f.ShowDialog(); 
4
ответ дан 18 December 2019 в 11:58
поделиться

Вы можете попробовать это

using System.Windows.Forms;

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

Пока.

1
ответ дан 18 December 2019 в 11:58
поделиться

Общий ответ:

[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()); 
} 
4
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: