Ios 我能';不要在Delphi中重新绘制我的表单
我正在创建一个Delphi程序,程序中有以下代码:Ios 我能';不要在Delphi中重新绘制我的表单,ios,delphi,delphi-xe2,firemonkey,Ios,Delphi,Delphi Xe2,Firemonkey,我正在创建一个Delphi程序,程序中有以下代码: begin if edit1.Text='salam' then begin for i := 1 to 10 do begin progressbar1.Value := progressbar1.Value+1; sleep(100); end; end; end; 我想让progressbar顺利运行。但是这个代码不是那样的。 我该怎么办?我想在睡觉后重新粉刷表格。你应该这样做
begin
if edit1.Text='salam' then
begin
for i := 1 to 10 do
begin
progressbar1.Value := progressbar1.Value+1;
sleep(100);
end;
end;
end;
我想让progressbar顺利运行。但是这个代码不是那样的。我该怎么办?我想在睡觉后重新粉刷表格。你应该这样做
begin
if edit1.Text='salam' then
begin
progressbar1.Step:=1;
for i := 1 to 10 do
begin
progressbar1.StepIt;
Application.ProcessMessages;
Sleep(100);
end
end;
end;
Windows需要处理要重新绘制的消息,并且要知道您的应用程序没有被刷新,Application.ProcessMessages就发挥了这一神奇的作用。您正在GUI线程中执行
睡眠操作(其他所有操作都在该线程中完成)并阻止UI重新绘制。您必须在另一个线程中执行此操作,或者在表单上使用tid防冻剂
组件。您真正的代码肯定不是在睡眠。你想达到什么目的呢?我想你忘记了在做完后的开始,以及睡觉后的结束。“你肯定不想只在设置progressbar1.value的行上循环?@WarrenP阅读了对Cesar答案的评论。我想知道在iOS上睡眠(x)是不是更糟糕的主意。”。可能是的。我还没有进入我的进度栏。我正在创建一个iOS高清应用程序。它重要吗?我还没有为iOS开发任何东西,所以我不确定Application.ProcessMessages是否存在,但如果它不存在,则必须有一个等效的。这在许多方面仍然是错误的。你的代码对于一个愚蠢的演示来说是很好的,但是千万不要在生产环境中编写这样的代码。您几乎不应该在主线程中睡觉,当然也不应该在循环中睡觉。添加Application.ProcessMessages可以解决冻结主窗口消息循环的明显问题,但在大型生产应用程序中可能会导致其他有趣的副作用。@WarrenP是对的,但由于它只是一个简单的进度条,没有必要编写更复杂的代码来完成这项任务。重入性可以允许各种事情发生。例如,进度条可能会被破坏。