Я создаю поток, который бы загонял итемы в компонент 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
Здравствуйте, 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);
}
Перепиши на С++ и все получится