我有个函数如:CreateListView;
在主线程里面执行正常,但是一反倒其他线程里面去,那么就会程序创建失败(没显示出创建乐得组件出来),
用了sychrosize虽然没出现什么异常,但是他只支持 过程参数 传递进去,用 函数 不能传递进去,请问改怎么办?
我要执行的那个 过程是需要返回值的。
在主线程里面执行正常,但是一反倒其他线程里面去,那么就会程序创建失败(没显示出创建乐得组件出来),
用了sychrosize虽然没出现什么异常,但是他只支持 过程参数 传递进去,用 函数 不能传递进去,请问改怎么办?
我要执行的那个 过程是需要返回值的。
解决方案 »
- 在线求助:DLL释放&关于窗体皮肤制作的资料 Delphi
- 请问如何将空值00写入到文件?就是用winhex打开显示的是00?
- ***********在微软做软件开发测试有前途吗***********
- 有什么方法可以实现,感觉一定可以,但是不知该如何做!
- 怎样通过捕捉windows消息知道鼠标滚轮滚动了多少?又怎样让tscrollbox滚动一定的数值?
- 傻瓜问题:如何在delphi中添加一个类
- 恳请高手帮忙分析哪里有问题?
- 怎样在报表中统计当前页内的某字段(在线等待 ,
- 如果我想将用户账号保存为全局变量,我该怎么做?
- MTS分发问题
- iris v4.07网络监听器 对于EDGE无线上网来说 是不是无法监听?
- Move函数的用法
一般可以把ListView放在主窗体上,然后把地址传递到线程中
代码看考: TMyThread = class(TThread)
private
Lv: TListView;
public
constructor Create(ALv: TListView);
destructor Destroy; override;
end; constructor TMyThread.Create(ALv: TListView);
begin
inherited Create; //初始化设置
Lv := ALv;
end; //主窗体单元
MyThread := TMyThread.Create(frmMain.Lv);
function CreateListView: LongBool;//这是个函数
begin
//这里的代码是创建一个TListView,返回创建成功或者失败
end;
我在线程的Execute过程里面写代码
var
vBool: LongBool;
BEGIN
vBool:= CreateListView;//这样会创建失败,
//使用procedure TThread.Synchronize(Method: TThreadMethod);就能创建成功
//如下,但是CreateListView这个函数必须改成过程procedure,也就是使用了Synchronize就不能得到返回值了,请问怎么办?
Synchronize(CreateListView);
END;
你可以创建TList来存储数据,窗体上的TListView显示数据
TList, TStringList, THashStringList。
用了sychrosize是子线程发消息给主线程,让主线程执行改方法,因此达不到在开线程的效果。子线程的目的一般是有费时的操作(如数据处理、网络等待)放到子线程处理,处理完毕后使用sychrosize发消息给主线程,让其将处理结果显示在界面上。