請告訴我:如何知道TEvent是否有信號?德爾福。如何知道TEvent是否有信號?
點擊STOP按鈕= SetEvent(Events[1]);
我想解壓縮的檔案,如果按了停止鍵則胎面必須終止並Unzippping必須中止。
我的代碼:
procedure TForm2.ZipForge1OverallProgress(Sender: TObject; Progress: Double;
Operation: TZFProcessOperation; ProgressPhase: TZFProgressPhase;
var Cancel: Boolean);
begin
if Events[1]<>null then
begin
ThreadUpdating.Terminate;
Abort;
end else
form2.Update_ProgressBar.Position := Trunc(Progress);
end;
但是如果我按STOP按鈕(SetEvent的(活動[1]))沒有任何反應。我在線程中使用WaitForMultipleObjects(Event[1],Event[2])
。事件[1]被用作兩個部分的STOP信號:ZipForge1OverallProgress
和WaitForMultipleObjects
。
好點,我認爲處理程序是從同步方法調用的,但可能不是... – 2011-06-06 01:11:03
我的代碼。起初:form2.ZipForge1。提取文件('*。*'); ...然後 對象信號:= WaitForMultipleObjects(2,@ Events,false,INFINITE); if ObjectSignal = WAIT_OBJECT_0 then ...; 事件#2設置了一些東西,我們不在乎。 事件1(停止按鈕):如果在解壓縮WaitForMultipleObjects之後按下停止按鈕(SetEvent#1)將作出反應。但是如果我在解壓縮的時候按Stop-Button? ZipForge必須知道我按下了按鈕,必須中止並且必須完成Thread.Terminate。他們傷心,如果我會使用布爾值來檢查它而不是事件,那麼布爾值可能是錯誤的,值可以是現金,所以我使用TEvent。 – Michael 2011-06-06 02:03:56
「他們」正在討論使用布爾值來檢查是否按下了「停止」按鈕,而不是使用布爾值來停止進一步處理zip文件。 「他們」已經明確地*給出*一個布爾變量供您填寫('Cancel'參數)。你應該修改它,如文件肯定告訴你。你不需要拋出異常。不要等待無限的事件被髮信號 - 這是適得其反的,因爲你正在阻止zip文件被進一步處理。 – 2011-06-06 04:14:05