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;
       }
   }

コントロールを呼び出して作業するのはこれが初めてです。だから私が間違っているところを教えてください。私が得る1つのエラーは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 に答える