【发布时间】:2015-06-08 09:39:47
【问题描述】:
我正在尝试使用 while 循环检查按钮左侧属性来移动表单上的 2 个按钮,但我遇到了访问冲突。我正在使用 CreateThread() 执行该过程
The code:
procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin
try
while (b2 <> 187) do
begin
b2 := frmNotification.btnBuzina2.Left;
frmNotification.btnBuzina2.Left := b2 - 1;
end;
while (b1 <> 256) do
begin
b1 := frmNotification.btnBuzina.Left;
frmNotification.btnBuzina.Left := b1 - 1;
end;
except;
end;
end;
但是,当我使用 Sleep() 至少 5 毫秒时,我没有访问冲突,如下所示:
procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin
try
while (b2 <> 187) do
begin
b2 := frmNotification.btnBuzina2.Left;
frmNotification.btnBuzina2.Left := b2 - 1;
Sleep(5);
end;
while (b1 <> 256) do
begin
b1 := frmNotification.btnBuzina.Left;
frmNotification.btnBuzina.Left := b1 - 1;
Sleep(5);
end;
except;
end;
end;
有人可以帮我找出为什么没有睡眠我会获得访问冲突,而我却没有?
提前谢谢!
【问题讨论】:
-
在使用“while ...”测试它们的值之前,您省略了初始化 b1 和 b2。它们在进入 AnimButton1 时会有随机值。
-
请告诉我们发生异常的确切消息,并在上面的代码中标记该行以显示代码中断的位置。
-
例外是prntscr.com/7emu4e 发生在'end;'之前的while内
标签: delphi button access-violation