【发布时间】:2017-03-01 18:31:26
【问题描述】:
我想在 wpf 中打开一个控制台,我试图在不关闭程序的情况下打开控制台两次,但是在第二次程序崩溃时,我真的不知道为什么,我很乐意提供帮助
using System;
using System.Windows;
using System.Runtime.InteropServices;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport("Kernel32")]
public static extern void AllocConsole();
[DllImport("Kernel32")]
public static extern void FreeConsole();
private void button_Click(object sender, RoutedEventArgs e)
{
AllocConsole();
string x = Console.ReadLine();
FreeConsole();
}
}
}
【问题讨论】:
-
“程序崩溃” -- 请具体说明。程序以何种方式“崩溃”?它只是停止响应了吗?它抛出异常了吗?它只是消失了吗?哪里有任何类型的错误消息?如果是这样,他们说了什么,确切地?如果有异常,堆栈跟踪是什么?请改进您的问题。
-
我尝试了您发布的代码,我得到了三种不同的行为:有时它可以正常工作;有时它会挂起控制台,从而挂起整个程序;有时它会在
ReadLine()调用时引发异常:The handle is invalid。我对控制台 API 的了解不够,无法解释为什么您所做的事情本身是错误的,但很明显这不是您期望使用控制台 API 的方式。此外,我会说即使它有效,这是错误的做法。你有一个 GUI 程序;如果您想显示控制台,请显示您自己的窗口并将其用于此目的。