Темы: BeginInvoke, как добавить полный ListviewItem? - PullRequest
2 голосов
/ 05 июня 2011

как я могу добавить подпункты списка в процессе BeginInvoke -> myDelegate? Я пробовал разные варианты решений, но всегда с ошибкой!

Большое спасибо за помощь!

    public delegate ListViewItem myDelegate(string  aItem);    
...
        if (InvokeRequired)
            {
            ListViewItem lvwItem = new ListViewItem();
            lvwItem.Text = strMessage;
            lvwItem.SubItems.Add(".2.");
            BeginInvoke(new myDelegate(listView1.Items.Add), new string[] { strMessage }); //works with a var of type string, but not for more Subitems.add()

            }

Я нашел ответ, но не могу опубликовать его как ответ, потому что мне нужно подождать 7 часов ....

я нашел решение без сбоев моего многопоточного приложения ... я тупой;)

в моем делегате я использовал String вместо Listviewitem!

      public delegate ListViewItem myDelegate2(ListViewItem  aItem);
...
                                  if (InvokeRequired)
                                    {
                                        //BeginInvoke(new myDelegate(listView1.Items.Add), new object[] { strMessage });
                                        ListViewItem lvwItem = new ListViewItem();
                                        lvwItem.Text = strMessage;
                                        lvwItem.SubItems.Add(".2.");
                                        BeginInvoke(new myDelegate2(listView1.Items.Add), new object[] { lvwItem });
}

1 Ответ

4 голосов
/ 05 июня 2011

Вы, кажется, довольно сильно связаны.Попробуйте это:

ListViewItem lvwItem = new ListViewItem();
lvwItem.Text = strMessage;
lvwItem.SubItems.Add(".2.");
if (listView1.InvokeRequired)
    listView1.BeginInvoke(new MethodInvoker(() => listView1.Items.Add(lvwItem)));
else
    listView1.Items.Add(lvwItem);
...