특정 인수가 전달되면 콘솔 응용 프로그램으로 사용할 수있는 WinForm 프로젝트가 있습니다. 여기에서 읽은 팁을 사용하여 다음 코드를 사용하여이 작업을 수행했습니다.WinForm/Console 하이브리드 응용 프로그램의 동작
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
...
if (!AttachConsole(-1))
{
AllocConsole();
}
이 작동하지만, 하나의 성가신 부작용이 - 모든 출력이 백그라운드 스레드에서 생성 된 것으로 보인다는. 명령 프롬프트에서 프로그램을 실행하면 결과를 표시하기 전에 다음 프롬프트가 출력됩니다.
프로젝트 속성의 출력 유형을 콘솔 응용 프로그램으로 설정하고이 문제를 해결했지만 이제는 'WinForm 모드'로 실행되는 경우에도 항상 콘솔 창이 표시됩니다.
프로그램이 WinForm을 표시 할 때 프로그램이 현재 프로세스이고 콘솔 창이 표시되지 않는 것처럼 콘솔이 작동하는 환경을 최대한 활용할 수있는 방법이 있습니까?
업데이트 : 불편을 끼쳐 드려 죄송합니다. 내가 잘못하고 봤는데
어쩌면// nowin is a bool that is set based on a parameter
if (nowin)
{
if (!AttachConsole(-1))
{
AllocConsole();
}
//... Console mode code here...
}
else
{
// run in window
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(argDict));
}
발견 한 것은 현재 WinForm 응용 프로그램이 작동하는 "부작용"이 아닙니다. 당신이 별도의 프로그램을 가지고 있다면 그것은 훨씬 쉬울 것입니다. 이것이 가능하도록 응용 프로그램을 설계하십시오. –
[cmd에서 실행할 때 콘솔 및 winforms 응용 프로그램 간의 차이점] 가능한 복제본 (http://stackoverflow.com/questions/7613880/difference-between-console-and-winforms-applications-when-running-from-cmd) –