我有两个线程同时处理界面中的一个ListView
线程1:
我自己建立的线程类 对象 mythreadObj:
Execute()方法是一个死循环,循环内部有个这样的语句处理ListView
aListItem:=form1.ListView1.Items[i];
Synchronize(SetlistItemicon); //方法setlistitemicon 是设置所选的项的图标
。
。。
end;线程2中,我用一个timer定时器:
每隔一段时间,就刷新整个Listview中的列表。
就是每隔一段时间,就从一个数组中取出数据,根据数据生成listview中的item
listview1.clear;
根据数组内容,添加Item 我运行程序的时候,有时会出现异常,
应该是 两个线程间 同时操作Listview,所以出现异常
怎么处理呀。希望大虾给个 思路和帮我上面的加段代码
没做过多线程的,帮帮忙,急 急 急
线程1:
我自己建立的线程类 对象 mythreadObj:
Execute()方法是一个死循环,循环内部有个这样的语句处理ListView
aListItem:=form1.ListView1.Items[i];
Synchronize(SetlistItemicon); //方法setlistitemicon 是设置所选的项的图标
。
。。
end;线程2中,我用一个timer定时器:
每隔一段时间,就刷新整个Listview中的列表。
就是每隔一段时间,就从一个数组中取出数据,根据数据生成listview中的item
listview1.clear;
根据数组内容,添加Item 我运行程序的时候,有时会出现异常,
应该是 两个线程间 同时操作Listview,所以出现异常
怎么处理呀。希望大虾给个 思路和帮我上面的加段代码
没做过多线程的,帮帮忙,急 急 急
uses SyncObjs;//定义一个全局变量
var
CS: TCriticalSection;
在操作LV之前调用:
CS.Enter;
操作完成后:
CS.Leave;initialization
CS := TCriticalSection.Create;
finalization
CS.Free;
线程中操作VCL很正常,比如多线程下载列表就有可能会用到
楼主可以把SetlistItemicon过程贴出来看看,还有出现异常的提示信息。
begin
case pListState of
0:begin
Plistitem.ImageIndex:=0;
end;
1:begin
Plistitem.ImageIndex:=1
end;
2:begin
Plistitem.ImageIndex:=2;
end;
end;异常提示 就是 violation access 地址 xxxxx 之类的
不知道 是什么原因呀。
我在execute()方法的死循环内部加个延时的函数
procedure execute()
beign
while not Terminated do
begin
......
.....
aListItem:=form1.ListView1.Items[i];
Synchronize(SetlistItemicon); //方法setlistitemicon 是设置所选的项的图标
delay(500);//自己写的延时函数
end;
end;到底是什么问题???
是不是要用用临界区来做,如果是的话,该怎么做????
请高手指点呀 很急 急 急