当我尝试在 wpf 中打开它两次时,控制台崩溃了

the console crashed when i try to open it twice in wpf

我想在 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(),看来您还需要重新分配 Console class 的输入流:

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();
}

就是说,我认为您确实在朝着错误的方向前进。控制台 window 是一种与用户交互的极其有限的方式。这就是我们首先拥有 GUI 程序(Winforms、WPF 等)的原因。几乎没有困难,当然 方式 比 运行 更难进入与在托管程序中混合非托管调用相关的不熟悉的错误,您可以创建一个 window对于你的程序,它可以完成控制台 window 所做的一切,但做得更好。恕我直言,这确实是正确的方法。