考慮給定按鈕的OnClick事件中執行下面的代碼:德爾福2010年,儘管相應的按鈕處理Click事件被禁用
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.enabled := false; //Line 1
application.processmessages; //Line 2
Sleep(3000); //Line 3
button1.enabled := True; //Line 4
Release; //Line 5
end;
德爾福2010年,如果點擊這個按鈕,你以後在第3行中執行繁忙時再次執行另一個 點擊,隨後的點擊 事件將顯然存儲在命令隊列中,因此當調用Release(第5行)過程時,應用程序將嘗試過程 它。因此點擊事件將再次被觸發。第二次 左右,按鈕組件已經被銷燬,因此引發了「訪問違規」錯誤。
當相應的 按鈕被禁用時,系統確認第二次點擊的整個概念似乎並不健全。對這個黑幕行爲的任何解釋?
這就是你使用邪惡的Application.Processmessages時得到的結果。一個聲音提示,如果你有一些長處理要做,將它移動到另一個線程... – whosrdaddy
'Release()'也是一個排隊命令,所以任何已經在調用Release()之前的消息隊列中的點擊將被調用在表單獲得釋放之前進行處理。 –
@Khatchig你從未投過票,從未接受過答案。我懷疑你還沒有學會如何去做這些事情。請閱讀以下內容:http://meta.stackexchange.com/questions/5234/ –