当我尝试在 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 所做的一切,但做得更好。恕我直言,这确实是正确的方法。
我想在 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 所做的一切,但做得更好。恕我直言,这确实是正确的方法。