c# - 无法防止双重输入 c# listview
问题描述
我正在尝试编写任务管理器。
在这里我的问题是我在列表视图中添加了进程列表,但我找不到没有相同双重输入的方法
这里的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Process_Manager
{
public partial class Form1 : Form
{
List<int> processId = new List<int>();
int first_time = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void do_job(List<int> test,int id)
{
for(int i = 0; i < test.Count; i++)
{
if(!listView1.Items.ContainsKey(Convert.ToString(id)))
{
ListViewItem t = new ListViewItem(Convert.ToString(id));
listView1.Items.Add(t);
}
}
}
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
Process[] process = Process.GetProcesses();
foreach (Process t in process)
{
processId.Add(t.Id);
}
for(int i = 0; i < processId.Count; i++)
{
ListViewItem listviewitemprocess = new ListViewItem(Convert.ToString(processId[i]));
listView1.Items.Add(listviewitemprocess);
}
processId.Clear();
}
}
}
我尝试使用列表,将数据添加到列表中,然后清除列表以获得没有 doublon 的新列表。但这似乎行不通!
我真的被困住了!
解决方案
我看到一些步骤,您将项目添加到列表视图但从不删除任何项目。我建议创建一个仅用于使用当前集合更新列表视图的方法,我建议调用 listView1.Items.Clear(); 在添加集合之前。
可能是这样的:
using System.Linq;
private void UpdateListView()
{
var newListViewItems =
Process.GetProcesses().
Select(p => new ListViewItem(p.Id.ToString())).
ToArray();
listView1.BeginUpdate();
try
{
listView1.Items.Clear();
listView1.Items.AddRange(newListViewItems);
}
finally
{
listView1.EndUpdate();
}
}
推荐阅读
- perl - GeoLite2 是否提供坐标?
- wpf - 如何使用 Helix.Toolkit.Wpf.SharpDx 显示 PointGeometryModel3D
- kdb - KDB - 当我将工作代码包装在函数中时出现错误
- python - TypeError:字节索引必须是整数或切片,而不是 str HTTP500 响应
- traefik - Traefik,如何禁用我没有问过的主机的检查 ACME 证书
- python - Django Soft 删除和通用关系管理器
- mysql - 使用对结果值具有“乘数”影响的单个列对多个表进行内部连接
- vb.net - IsPostBack 总是假的
- kubernetes - 从 kubectl rollout 中获取“错误:为第二层用户找到多个身份验证方法;找到 [token basicAuth],只允许一个”
- java - 附近的地点未显示