0

我正在用一个 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 启动时,用户无法在我的“控制台”之类的窗口上滚动以做出信息决定。为了临时解决这个问题,我在启动时启动了一个控制台,查看这个,并将运行可执行文件的进程的输出流写入控制台,以便用户可以滚动浏览信息并做出决定。

我正在使用列表框来显示文本块的集合,请参阅。我没有附加任何用于制作显示或 MessageBox 的东西。

我怎样才能制作一个类似于显示的“控制台”,它将接受用户输入(MessageBox、直接输入等),但还允许他们在做出决定之前滚动浏览数据?

编辑: 至于我收到的评论,我不清楚我要完成什么。我有一个批处理文件,它多次运行一个可执行文件,每次运行时使用不同的参数。在可执行调用之前和之间有很多设置。我创建了一个可执行文件,用下拉菜单替换类似批处理文件的多种风格,供用户在运行时更改设置。当用户喜欢他们的设置时,他们单击“开始”按钮,然后它会进行设置并提示问题,然后最终第一次运行可执行文件。

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

任何有关如何执行此操作的建议将不胜感激。

4

1 回答 1

0

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

但是,有一个技巧,它允许在无模式中显示模态(阅读“阻止你的代码”)对话框(阅读“不阻止你的窗口”)。不知道如何在 WPF 中实现这一点,但想法是重新启用您的窗口(它充当您的对话框的父级)。您需要在对话框事件处理程序中执行此操作(WM_INITDIALOG等效?)。

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

于 2013-02-23T06:47:00.293 回答