Изменить Main в проекте WPF

Меня всегда раздражало, как C# хочет сделать запуск за вас. Итак, теперь я пытаюсь сделать свой собственный основной метод. Это не работает:

Я предоставил этот основной метод:

[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main()
{
    Model model= new Model();
    Controller controller = new Controller(model);
    MainWindow window = new MainWindow(controller, model);
}

Этот метод запущен, но я не вижу ничего визуального. Я думаю, что что-то упускаю из следующего нормального основного кода:

Application.App app = new Application.App();
app.InitializeComponent();
app.Run();

Я попытался переопределить OnStartUp с тем же кодом, но это вызывает исключение. Если у вас есть другие решения, я готов услышать. Я просто не понимаю, почему мой MainWindow должен быть создан первым.


person Mads Andersen    schedule 22.12.2009    source источник


Ответы (2)


Вы правы: вам нужно создать экземпляр приложения и вызвать для него Run. (Вы бы сделали это в Main.) Есть три варианта, чтобы он показывал ваше окно при запуске:

  • Используйте перегрузку Run(Window), например. MainWindow w = ...; new MyApp().Run(w);
  • Установите StartupUri, например. myApp.StartupUri = new Uri(...); myApp.Run();
  • Выполните Show in the Startup event или переопределить OnStartup, например. myApp.Startup += (...) => new MainWindow().Show();

Примеры кода запуска вручную приведены в MSDN в разделе Application.Run() и записи Application.Run(Window) — они помогут вам начать ! В перегрузке Run() также обсуждается, почему нужен Application.Run и что он делает, например. запуск диспетчерского цикла.

person itowlson    schedule 22.12.2009
comment
Спасибо! Как раз то, что мне нужно было знать :) - person Mads Andersen; 22.12.2009

Меня всегда раздражало, как C# хочет сделать запуск за вас. Итак, теперь я пытаюсь сделать свой собственный основной метод. Это не работает:

C# не выполняет запуск за вас. Он вставляет код, который делает это за вас. Вы всегда можете изменить код и все, что захотите. Первое, что я бы сделал на вашем месте — щелкните правой кнопкой мыши файл проекта и выберите «Свойства». В разделе «Приложение» (верхняя вкладка) — см. «Объект запуска».

Вы можете выбрать форму

Кроме того, вам не хватает строки, если вы хотите, чтобы появилось окно:

window.Show();
person Gabriel McAdams    schedule 22.12.2009
comment
Я полагаю, что window.Show вызовет появление окна, а затем немедленно исчезнет при завершении процесса (поскольку Show не ждет, пока окно закроется). - person itowlson; 22.12.2009
comment
затем используйте window.ShowDialog(); - person Gabriel McAdams; 22.12.2009