使用线程从列表视图中获取项目[i]

本文关键字:项目 获取 视图 线程 列表 | 更新日期: 2023-09-27 18:32:26

我有一个这样的函数:

foreach (ListViewItem item in getListViewItems(listView2)) //for proxy
{
    if (reader.Peek() == -1)
    {
        break;
    }
    lock (reader)
    {
        line = reader.ReadLine();
    }

    //proxy code
    List<string> mylist = new List<string>();
    if (item != null)
    {
        for (int s = 0; s < 3; s++)
        {
            if (item.SubItems[s].Text != null)
            {
                mylist.Add(item.SubItems[s].Text);
            }
            else
            {
                mylist.Add("");
            }
        }
    }
    else
    {
        break;
    }
    //end proxy code

    //some other code including the threadpool
}

和委托代码:

private delegate ListView.ListViewItemCollection GetItems(ListView lstview);
private ListView.ListViewItemCollection getListViewItems(ListView lstview)
{
    ListView.ListViewItemCollection temp = new ListView.ListViewItemCollection(new ListView());
    if (!lstview.InvokeRequired)
    {
        foreach (ListViewItem item in lstview.CheckedItems)
        {
            temp.Add((ListViewItem)item.Clone());
        }
        return temp;
    }
    else
    {
       return (ListView.ListViewItemCollection)this.Invoke(new GetItems(getListViewItems), new object[] { lstview });
    }
}

编辑:

我想用条件函数替换主函数中的 foreach 循环:

if (reader.Peek() == -1)
{
    break;
}
lock (reader)
{
    line = reader.ReadLine();
}

if (use_proxy == true)
{
    mylist2 = get_current_proxy();
}
//some other code including the threadpool
private List<string> get_current_proxy()
{
    //what shall I add here?
}

如何使该函数与foreach循环相同但使用for循环?我的意思是一一获得代理...

使用线程从列表视图中获取项目[i]

我看到多个问题围绕着抓取网站以获取电子邮件然后发送垃圾邮件的想法。 您已经拥有非常酷的工具,不需要新的工具。

无论如何 - 我不明白你的问题,似乎我不是唯一一个在这里的人,但你必须在做任何事情之前知道的事情是:

当您执行Invoke()时,Windows中的任何内容最终必须在多个线程中运行,这必须等到它全部通过一个线程并且是保存消息循环的线程。 因此,您可以尝试从多个线程读取或写入ListView,但要执行每个读/写,您必须Invoke()(您可能直接尝试过并尝试过BAAAAM),并且每个Invoke()只有一个孔要通过,并且所有线程都必须等待轮到它们。

下一篇: 将 ListView 作为数据的容器是如此糟糕,我什至无法进一步评论。 将某事视为

class MyData
{
    public string Name;
    public string URL;
    // ...
}

List<MyData> _myData;

以保存您的数据。 如果您处理了一些低调的同步问题,您将能够从多个线程访问它。

最后,如果您甚至不知道语法,为什么会问我们有关 .net C# 编程的问题。 嗯,这是修辞,...