C#将项目添加到列表视图会被线程窃听

本文关键字:线程 窃听 视图 列表 项目 添加 | 更新日期: 2023-09-27 17:59:26

所以我有一段代码可以向listView添加信息,但它似乎有点"bug"。所以,我有两条信息。它完美地添加了一个,但如果它添加了第二个,它告诉我,它已经存在于那里&显示了我的第一个项目名称,所以基本上它尝试添加两次相同的东西。

info.Text = Username;
info.SubItems.Add(Password);
info.SubItems.Add(Points.ToString());
info.SubItems.Add(Level.ToString());
listView1.Items.Add(info);

我也试着"调试"它,通过看到控制台输入的用户名,密码等。所有这些都是不同的。

//编辑

我刚刚进行了第二次调试,如果信息被传递到addItems()void,那么数据就会发生变化,所以我认为它会被线程以某种方式窃听。

C#将项目添加到列表视图会被线程窃听

如果这不是您想要的解决方案,我们深表歉意。由于您的问题缺乏一些细节,这是根据我可能理解的内容制作的

info是自定义类吗?如果是这样的话,我假设SubItems也是一个List对象。如果这些场景是正确的,那么你的类应该看起来像

public class info
{
    public string Text { get; set; }
    public List<string> SubItems { get; set; }
    /* Other Code */
}

现在,如果我没有错的话,您似乎正在尝试将数据序列化为字符串,然后添加到ListView?如果是这样的话,有几种方法可以做到这一点:

public class info
{
    /* Other Code */
    public override string ToString()
    {
        return $"Username: {Text}; Password: {SubItems[0]}; Points: {SubItems[1]}; Level: {SubItems[2]};"
    }
}

现在,如果所有这些都是真的,你现在可以执行:

info PersonInfo = new Info()
{
    Text = Username;
    SubItems = new List<string>()
    {
        Password,
        Points.ToString();
        Level.ToString();
    }
}
ListView1.Items.Add(ParsonInfo.ToString());