我想在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();
}
}
}
答案 0 :(得分:0)
如果您想继续分配新控制台,然后使用Console
用于新控制台,您似乎还需要重新分配ReadLine()
类的输入流:
private void button_Click(object sender, RoutedEventArgs e)
{
AllocConsole();
using (Stream stream = Console.OpenStandardInput())
using (TextReader reader = new StreamReader(stream))
{
string x = reader.ReadLine();
}
FreeConsole();
}
那就是说,我认为你真的走错了方向。控制台窗口是用于与用户交互的极其有限的手段。这就是为什么我们首先拥有GUI程序(Winforms,WPF等)。与遇到与托管程序中非托管调用混合相关的不熟悉错误相比,只需很少的难度,并且当然方式的难度较小,您可以为程序创建一个窗口来执行控制台窗口所做的一切,但它做得更好。恕我直言,这真的是正确的方法。