REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoDetect /t REG_DWORD /d 0 /f
如果在执行循环期间单击表单,整个程序将无响应并崩溃。为了解决这个问题,我尝试使用
procedure TSlashForm.Button1Click(Sender: TObject);
begin
Repeat
//some code
until //some condition;
end;
和
SlashForm.Update;
但这些似乎都不起作用。我怎样才能避免无反应的状态呢?
答案 0 :(得分:4)
或者每隔100-1000次左右调用循环中的application.processmessages。 (如果迭代速度慢,则大约每秒5-10次)
答案 1 :(得分:0)
您也可以使用多线程。在此变体中,您的程序通过创建执行循环的线程来响应单击按钮:
type
TAThread = class(TThread)
public
procedure Execute; override;
procedure SafeFree;
end;
theThread: TAThread;
procedure TAThread.Execute;
var
//some variables
begin
repeat
// some code
until // some condition
end;
procedure TSimulationThread.SafeFree; {avoids a dead-lock situation}
begin
Terminate;
WaitFor;
if not FreeOnTerminate then
Free;
end;
procedure TSlashForm.Button1Click(Sender: TObject);
begin
if assigned(theThread) then
theThread.Execute
else
theThread := TAThread.Create(false);
end;
有关工作示例,请参阅http://sourceforge.net/p/simthyr/code/HEAD/tree/trunk/simulator.pas。