c# - C# WPF 帮助 1. 删除列表框中的前两个条目或 2. 阻止它在输出中显示批处理中的命令语法
问题描述
这是我在 wpf 中的 window_loaded 事件期间调用的代码片段。它将执行一个批处理文件,并在列表框中输出结果。但是,列表框中的第一个条目显示批处理文件中的命令本身。我想删除第一个条目,或者如果不能以有效的方式完成,那么首先要阻止它显示它。
我曾尝试使用 item count remove,但它会引发 outofargument 异常。我有根据的猜测是,尽管它试图在 window_loaded 中添加项目,但在窗口实际完成加载之前它不会完成添加。因此,当我调用语法以从索引计数中删除项目时,它会引发该错误,因为此时列表框仍为空。那么如何在窗口加载时添加数据,一旦完成添加数据,从批处理中删除包含语法的第一个条目或阻止它显示第一个条目。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var info = new ProcessStartInfo("extractServiceList.bat") { UseShellExecute = false, RedirectStandardOutput = true };
var proc = new Process { StartInfo = info, EnableRaisingEvents = true };
proc.OutputDataReceived += (obj, args) =>
{
if (args.Data != null)
{
this.Dispatcher.Invoke(() =>
{
listBoxServices.Items.Add(args.Data);
//below logic for removing whitespaces from listbox view
int count = listBoxServices.Items.Count;
for (int i = count - 1; i >= 0; i--)
{
//Condition evaluating to see if it return true for = listbox items empty and
//looping through each entry to remove the whitespace entry
if (String.IsNullOrWhiteSpace(listBoxServices.Items[i].ToString()))
{
listBoxServices.Items.RemoveAt(i);
}
}
//end of logic above for removing whitespaces from listbox view
});
//listBoxServices.Items.RemoveAt(listBoxServices.Items.Count - 1);
}
};
proc.Start();
proc.BeginOutputReadLine();
}
解决方案
也许您可以收集所有输出,首先检查并添加到输出(如果不是空格)。然后,在Exited
事件中添加到列表框。这是一个命令行示例,但如果您替换Exited
事件处理程序,它应该在 WPF 中工作。
List<string> output = new List<string>();
proc.OutputDataReceived += (obj, args) =>
{
if (args.Data != null)
{
if (String.IsNullOrWhiteSpace(args.Data))
return;
output.Add(args.Data);
}
};
proc.Exited += (s, args) =>
{
foreach (var o in output)
Console.WriteLine(o);
}
推荐阅读
- c# - 获取操作系统、已连接计算机的磁盘空间 windows
- java - 在我的汽车类中通过布尔方法比较两个对象
- python - pip install iconsdk:命令“python setup.py egg_info”失败,错误代码为 1
- netsuite - 使用标签的 Netsuite 客户端脚本
- mysql - MySQL 一对多与首选
- sql - GetDate() 返回常量字面错误,如何解决?
- javascript - Ionic 3动态单选按钮formBuilder验证如果全部选中则启用按钮
- node.js - 如何在不使用 npm install 的情况下安装漂白模块?
- javascript - Javascript如何使用递归从对象中打印值
- android - Android 应用已成功在 Google Play 上发布,但无法在 Google Play 商店中搜索