Я выполняю XCode на текущем генерале Macbook только с одним ГБ RAM, и это хорошо работает, пока я ограничиваю объем общего выполнения приложений.
Хотя это не совсем то, о чем вы просили, я добивался появления этого поведения в прошлом, используя FreeConsole pInvoke для удаления окно консоли.
Вы устанавливаете тип вывода проекта как консольное приложение. Затем вы определяете внешний вызов FreeConsole
:
[DllImport("kernel32.dll", SetLastError=true)]
private static extern int FreeConsole();
Затем в своем методе Main
вы переключаетесь в зависимости от ваших условий. Если вам нужен пользовательский интерфейс, вызовите FreeConsole
перед открытием формы, чтобы очистить окно консоли.
if (asWinForms)
{
FreeConsole();
Application.Run(new MainForm());
}
else
{
// console logic here
}
Окно консоли ненадолго появляется при запуске, но в моем случае это было приемлемо.
Это немного хакерский и имеет неприятный запах, так что я бы серьезно подумал, действительно ли вы хотите пойти по этому пути.
From 'The Old New Thing'
How написать программу, которую можно запускать как консоль или приложение с графическим интерфейсом пользователя?
Вы не можете.
(Я позволю вам щелкнуть статью, чтобы узнать, как ее подделать)
Конечно, просто поместите оператор switch (или конструкцию другого типа) в статический main (string [] args) на основе аргументов, переданных в командной строке . Я также делаю это, чтобы переключаться между выполнением в качестве службы или в качестве консоли ...
ПРИМЕЧАНИЕ. Установите тип проекта как консольное приложение.
[DllImport("kernel32.dll", SetLastError=true)]
private static extern int FreeConsole();
[STAThread]
static void Main(string[] args)
{
if (args.Length == 0 && args[0] == "C") // Console
{
// Run as console code
Console.WriteLine("Running as Console App");
Console.WriteLine("Hit any Key to exit");
Console.ReadLine();
}
else
{
//Console.SetWindowSize(1,1);
//string procName = Assembly.GetExecutingAssembly().FullName;
//ProcessStartInfo info = new ProcessStartInfo(procName );
//info.WindowStyle = ProcessWindowStyle.Minimized;
// EDIT: Thanks to Adrian Bank's answer -
// a better approach is to use FreeConsole()
FreeConsole();
Application.Run(new MyForm());
}
}
РЕДАКТИРОВАТЬ: Благодаря ответу Адриана Банка FreeConsole () - гораздо лучший подход к "распределению" "с окном консоли, чем просто свернуть его ...
Это две разные парадигмы, я не думаю, что использование такого переключателя командной строки - хорошая идея. Почему бы не встроить основную логику в консольное приложение, а затем при необходимости вызвать ее из графического интерфейса? Это красиво отделит пользовательский интерфейс от реализации, но все же предоставит возможность использовать автономное консольное приложение при необходимости.
Я считаю, что ответ отрицательный, или это был последний раз, когда я рассматривал эту проблему.
Исполняемый файл помечен либо как оконное приложение, либо как консольное приложение. Вы можете увидеть это в свойствах вашего проекта в Visual Studio, в разделе «Тип вывода»
. Вы можете смоделировать поведение, имея два приложения, консольное приложение, которое, если оно выполняется без аргументов, запускает приложение с графическим интерфейсом пользователя. Вы можете увидеть вспыхивающее окно консоли, если только вы не зашли с уже открытой консоли.
Без реализации вашей собственной версии окна консоли ответ будет отрицательным. Когда Windows загружает ваш исполняемый файл, она решает, предоставлять ли вам консольное окно на основе данных в заголовке PE. Таким образом, вы можете сделать оконное приложение без окна, но вы не можете сделать так, чтобы у оконного приложения была консоль.