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

时间:2016-10-19 23:02:53

标签: c# wpf forms kernel32

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

1 个答案:

答案 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等)。与遇到与托管程序中非托管调用混合相关的不熟悉错误相比,只需很少的难度,并且当然方式的难度较小,您可以为程序创建一个窗口来执行控制台窗口所做的一切,但它做得更好。恕我直言,这真的是正确的方法。