谁用过线程里访问多实例窗体 (100分)

L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建的一个窗体的多个实例,在线程里要判断有几个窗体实例存在,如果存在就启动窗体
里的timer。
创建如下:
var
chartview:array of Tchartview;
count:byte;
begin
count := high(chartview)-low(chartview)+1;
SetLength(chartview,count+1);
chartview[high(chartview)] := Tchartview.Create(self);
chartview[high(chartview)].show;
end;

线程里判断窗体实例存在如下:
for i:=0 to high(chartview)do
if chartview<>nil then
//执行到这一步出错
chartview.Timer1.Enabled:=true;
在线程里一执行到if chartview<>nil then
就出错,是什么原因?是同步的问题?
 
出的是什么错?
 
Project LTest.exe raised exception class EAccessViolation with message
'Access violation at address 0053F5B2 in module' LTest.exe'.Read of address
00000000'.Process stopped.Use Step or Run to contionue.
 
要么
for i:=0 to high(chartview)-1do

要么
for i:=1 to high(chartview)do
 
不不,在刚开始就报错,应该不是越界的问题
 
对,不是越界的问题,我试了,还是报错
 
指针错误啊。chartview的值可能不是Form的指针,或者没有赋值,你跟踪一下
 
//count := high(chartview)-low(chartview)+1;
这是什么意思呀!要么就count := 1;
 
还是不行:(是不是线程同步的问题?因为访问了vcl?可是我以前在线程里就创建一个窗体实例
就没有问题,如下
if (chartview<>nil) then
chartview.Timer1.Enabled:=true;
 
var
chartview:array of Tchartview;
count:byte;
你的ChartView是在那里声明的? 是局部变量还是全局变量? 应该是这个问题.
 
是局部变量,我试试用全局变量
 
我定义了全局变量,线程里居然不认!!!faint
 
哦,不行,不是全局变量的问题。疯了啊------------------那里的问题
 
你把代码贴上来或者发给我, 我看看. tseug@263.net
 
多谢,我给你发信了
 
接受答案了.
 
顶部