|
我在一个功能的代码里重载了DoRun方法,(代码如下):
procedure TWPHSGL.DoRun;
var
I: Integer;
S: string;
lFunc: TFunc;
lFuncIsRunning: Boolean;
tmpUniqueId:string;
begin
//加些判断是否关闭功能。
//判断当前要执行的功能是否已经运行
S := 'Biz:\OABGZDHXT\WPHSGL.FUNC';
for I := 0 to TSystemCore.FuncManager.RunningFuncCount-1 do
begin
if SysUtils.UpperCase(TSystemCore.FuncManager.RunningFuncs[I].BizClassURL.BizURL.URL) = SysUtils.UpperCase(S) then
begin
lFuncIsRunning := True;
break;
end else
begin
lFuncIsRunning := False;
end;
end;
if lFuncIsRunning =true then
begin
self.Terminate;
SystemCore.TSystemCore.FuncManager.RunFunc(Context.Parent,'',SysUtils.UpperCase(S) , '', nil, False);
end else
begin
tmpUniqueId:= SYSTEMCORE.TFuncManager.GetFuncUniqueID(context.parent, SysUtils.UpperCase(S),'');
lFunc:= SYSTEMCORE.TSYSTEMCORE.FuncManager.FindRunning(tmpUniqueId);
TSystemCore.FuncManager.ActivateFunc(lFunc);
end;
inherited;
end;
前几天运行还没错,今天再运行的时候,如果是初始化运行会卡死,如果用IE浏览会提示Stack OverFlow,加了断点运行的时候发现如果 lFuncIsRunning := True;的话程序会运行到红色那一句后不是接着往下执行而是跳回到一开始的For循环,最后陷入死循环不停的执行如下的代码
for I := 0 to TSystemCore.FuncManager.RunningFuncCount-1 do
begin
if SysUtils.UpperCase(TSystemCore.FuncManager.RunningFuncs[I].BizClassURL.BizURL.URL) = SysUtils.UpperCase(S) then
begin
lFuncIsRunning := True;
break;
end else
begin
lFuncIsRunning := False;
end;
end;
if lFuncIsRunning =true then
begin
self.Terminate;
SystemCore.TSystemCore.FuncManager.RunFunc(Context.Parent,'',SysUtils.UpperCase(S) , '', nil, False);
高手帮忙看看到底是什么问题,谢谢了 |
|