Wpf 创建类似控制台的进度窗口

Wpf 创建类似控制台的进度窗口,wpf,mvvm,batch-file,console,messagebox,Wpf,Mvvm,Batch File,Console,Messagebox,我用一个WPF可执行文件替换了许多批处理文件,这些批处理文件的功能几乎完全相同。我已经编写了程序,但是我的“控制台”式显示器有问题 在程序中,我调用一个可执行文件来执行任务。此可执行文件将其输出消息发送到控制台。我可以通过以下命令将它们重定向到类似“控制台”的显示 Process p = new Process(); p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.Sta

我用一个WPF可执行文件替换了许多批处理文件,这些批处理文件的功能几乎完全相同。我已经编写了程序,但是我的“控制台”式显示器有问题

在程序中,我调用一个可执行文件来执行任务。此可执行文件将其输出消息发送到控制台。我可以通过以下命令将它们重定向到类似“控制台”的显示

Process p = new Process();
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

p.StartInfo.FileName = MyExecutable;
p.StartInfo.Arguments = MyArguments;
p.Start();

while (!p.StandardOutput.EndOfStream)
{
   string _output = p.StandardOutput.ReadLine();

   // This is my display string ObservableCollection
   _displayString.Add(new DisplayData { _string = _output, _color = System.Windows.Media.Brushes.Black, _fontSize = 12 });

   // This is to redirect to a Console & what I want to get rid of 
   Console.WriteLine(_output);
}

p.WaitForExit();
当可执行文件运行完毕后,我使用一个消息框询问用户是否希望再次运行可执行文件。问题是,当MessageBox打开时,用户无法在类似“控制台”的窗口上滚动以做出信息性的决定。为了暂时解决这个问题,我在启动时启动了一个控制台,请参阅,并将运行可执行文件的进程的输出流写入控制台,以便用户可以滚动浏览信息并做出决定

我使用列表框显示文本块的集合,请参见。我不依赖任何东西来制作显示器或MessageBox's

我如何制作一个类似“控制台”的显示器,它将接受用户输入(MessageBox、direct input等),同时允许用户在做出决定之前滚动浏览数据

编辑: 至于我收到的评论,我不清楚我在努力实现什么。我有一个批处理文件,可以多次运行可执行文件,每次运行时使用不同的参数。在可执行调用之前和之间有很多设置。我创建了一个可执行文件,用下拉菜单替换了许多类似批处理文件的样式,以便用户在运行时更改设置。当用户喜欢他们的设置时,他们点击一个“开始”按钮,然后开始设置并提示问题,最后第一次运行可执行文件

我的问题是,当调用的可执行文件(在我的内部)运行完毕时,用户需要决定是否出于不同的原因再次运行它。我需要提示用户“再次运行-‘是’或‘否’?”,这就是我遇到问题的地方。MessageBox不允许我在进度窗口上滚动。我尝试了一个非模态对话框,但是使用Show()程序继续运行,ShowDialog()与MessageBox的问题相同


如果您对如何执行此操作有任何建议,我们将不胜感激。

您在Windows中,但正在尝试使用DOS范例。Windows是基于事件的系统!您需要编写“事件处理程序”,但不能将所有代码放在一个函数中

然而,有一个技巧,它允许在非模态中显示模态(读“阻塞您的代码”)对话框(读“不阻塞您的窗口”)。不确定如何在WPF中实现这一点,但想法是重新启用窗口(它充当对话框的父窗口)。您需要在对话框事件处理程序中执行此操作(
WM\u INITDIALOG
equivalent?)


另外(在WinAPI中),您可以运行对话框,将
NULL
作为父窗口。

您的问题不清楚。您没有显示“问题代码”示例,但提供了许多无用的信息。如果你不想阻塞你的窗口-使用无模式对话框。你真的需要一个messagebox吗?你能用两个按钮在窗口底部显示你的消息吗?@Maximus我试过了,但Show()会继续,ShowDialog()不会让我滚动。@Failed编程我想到了这一点,但没有花太多心思。我正试图想出一个好办法,用“停”和“等”来跳转。@failedprogramming我还想让消息在用户面前弹出,因为内部调用的可执行文件会让用户做白日梦,梦见它花了多长时间。