ListView и поток
От: marat_masm  
Дата: 07.06.07 16:50
Оценка:
Я создаю поток, который бы загонял итемы в компонент ListView. Код:

FillFO(startpath,types);//считываем новые итемы
ViewList->Items->ListViewItemCollection::AddRange(item);//добовляем новый итемы

На последней строчке прога вылетает с сообщением:
Cross-thread operation not valid: Control 'ViewList' accessed from a thread other than the thread it was created on.



10.06.07 01:09: Перенесено модератором из '.NET' — AndrewVK
Re: ListView и поток
От: nikov США http://www.linkedin.com/in/nikov
Дата: 07.06.07 17:18
Оценка: +1
Здравствуйте, marat_masm, Вы писали:

_>На последней строчке прога вылетает с сообщением:

_>Cross-thread operation not valid: Control 'ViewList' accessed from a thread other than the thread it was created on.

И в чем вопрос?
Re: ListView и поток
От: RvS_vs Россия  
Дата: 08.06.07 07:38
Оценка:
Здравствуйте, marat_masm, Вы писали:

_>Я создаю поток, который бы загонял итемы в компонент ListView. Код:


_>FillFO(startpath,types);//считываем новые итемы

_>ViewList->Items->ListViewItemCollection::AddRange(item);//добовляем новый итемы

_>На последней строчке прога вылетает с сообщением:

_>Cross-thread operation not valid: Control 'ViewList' accessed from a thread other than the thread it was created on.

Ты пытаешься добавлять итемы из потока отличного от потока в котором создан твой листвью (основной поток)

Есть у твоего листвью такой метод BeginInvoke, вот через него и изменяй


        private delegate void AddItemDelegate(ListViewItem itm);

        public void AddItem(ListViewItem itm)
        {
                if (ViewList.InvokeRequired)
            {
                ViewList.BeginInvoke(new AddItemDelegate(AddItemInMainThread) , itm);
            }
            else
                AddItemInMainThread(itm);
        }

                private void AddItemInMainThread(ListViewItem itm)
               {
                 VievList.items.Add(itm);
                }


Перепиши на С++ и все получится
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.