我有一个简单的WPF应用程序。在正常使用下,App.xaml将启动MainWindow.xaml。但我想设置它,以便如果使用特殊的命令行参数调用它,它将作为控制台应用程序运行。
所以这里大致是我的App.xaml.cs文件的样子:
Demo\HelloWorld\Model\Customer
我希望当我从命令行运行Demo\HelloWorld\Controller\Index
时,它会打印字符串"这是一个测试"。但是现在它没有打印任何东西。我怎样才能让它发挥作用?
答案 0 :(得分:9)
我们为此目的设有特殊班级:
internal static class ConsoleAllocator
{
[DllImport(@"kernel32.dll", SetLastError = true)]
static extern bool AllocConsole();
[DllImport(@"kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport(@"user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SwHide = 0;
const int SwShow = 5;
public static void ShowConsoleWindow()
{
var handle = GetConsoleWindow();
if (handle == IntPtr.Zero)
{
AllocConsole();
}
else
{
ShowWindow(handle, SwShow);
}
}
public static void HideConsoleWindow()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SwHide);
}
}
只需致电ConsoleAllocator.ShowConsoleWindow()
,然后写入控制台
答案 1 :(得分:2)
如果您不想创建Application对象,那么您应该创建一个包含Main入口点的单独类:
class Startup
{
[STAThreadAttribute]
public static int Main(string[] args)
{
if (args.Length == 0)
{
// run windowed
App app = new App();
app.InitializeComponent();
app.Run();
}
else
{
// run console
ConsoleManager.Show();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
return 0;
}
}
您还需要进入应用程序设置并将“启动对象”更改为“YourProjectNamespace.Startup”,有关详细信息,请参阅this article。
我正在呼叫的控制台功能来自this question的已接受答案,其中显示了如何使用标准控制台流。