0

我需要在 DoWork 事件处理程序中访问列表视图的项目。为此,我编写的委托和调用列表视图的方法是:

delegate ListView itemDelegate(ListView bufferedListView1);

   private ListView getItems(ListView bufferedListView1)
   {
       if (bufferedListView1.InvokeRequired)
       {
         //  BeginInvoke(new itemDelegate(getItems));
             bufferedListView1.Invoke(new itemDelegate(getItems));
       }
       else
       {
           return bufferedListView1;
       }
   }

这是我第一次使用调用控件。所以请让我知道我错在哪里。我得到的一个错误是gsm_modem.Form1.getItems(System.Windows.Forms.ListView): not all code paths return a value. 我什至猜想我写的可能是错的。请指正。。

4

2 回答 2

2

你可以做这样的事情

首先为您的表单在全局范围内创建共享变量。

List<string> listItems;

现在在调用 RunWorkerAsync 之前,请执行以下操作

listItems = new List<string>();
foreach (ListViewItem item in bufferedListView1.Items)
            {
                //If you want to add tag to list then you can use dictionary like Dictionary<string, object) listItems; and then add items as listItems.Add(item.Text, item.Tag); It only works if text is unique.
                listItems.Add(item.Text);
            }
bgw1.RunWorkerAsync();

现在使用 foreach 读取后台工作人员中的列表。

于 2012-08-18T09:32:40.837 回答
0

感谢@Ravi Patel 的想法。这是我为解决问题所做的:

ListView listItems = new ListView();\\In global scope

foreach (ListViewItem item in bufferedListView1.Items)
{
   listItems.Items.Add((ListViewItem)item.Clone()); // Copied the bufferedListview's items that are to be accessed in other thread to another listview- listItems
}

然后在我的另一个线程中轻松使用 listItems 。

于 2012-08-18T11:00:41.553 回答