如何防止在事件處理已經運行時啓動新的事件處理?德爾福並防止事件處理
我按下按鈕1並啓動事件處理程序。打印速度慢。 在窗體按鈕,編輯,組合中有幾個控件,我希望只有在完成運行處理程序後才允許新事件。
我已經使用fRunning變量來鎖定共享事件處理程序中的處理程序。有更聰明的方法來處理這個問題嗎?
procedure TFormFoo.Button_Click(Sender: TObject);
begin
if not fRunning then
try
fRunning := true;
if (Sender = Button1) then // Call something slow ...
if (Sender = Button2) then // Call something ...
if (Sender = Button3) then // Call something ...
finally
fRunning := false;
end;
end;
如果在窗體中只有一個Button1,這個很好的解決方案。 Button1的OnClick被禁用,但如果在Button1事件處理期間調用Application.ProcessMessages,則Button2可以觸發新的OnClick事件。 – pKarelian 2010-03-08 07:47:02
謝謝dummzeuch。接口包裝器是非常方便的方式來銷燬臨時事件對象。您不必撥打免費()。 – pKarelian 2010-03-08 07:53:16
+1但在*理論*中,有可能該事件在一段時間內不會重新連接。在實踐中,我認爲可以肯定的是,接口實例在調用完成時被破壞(並且事件處理程序被重新連接)。 – 2010-03-08 10:08:42