2011-11-10 18 views
1

私はApplication.Terminateを呼び出す場合または Application.MaiForm.Closeメソッド内に閉じます。アプリケーションは終了しません!Application.Terminateはありません

procedure doSomething; 
var 
    ErrorFound: boolean; 
begin 
    [...] 
    try 
    if ErrorFound then 
     Application.Terminate; 
    finally 
    [...] 
    end; 
end; 

私はその理由を理解できません。

試しに、Try ... Finallyブロック内からApplication.Terminateを呼び出しています。

答えて

7

おそらく、ビジー状態のループからApplication.Terminateを呼び出している可能性があります。それ自体は終了しません。イベントハンドラを入力してもそれから戻ってこない場合は、Application.TerminateまたはApplication.MainForm.Closeを呼び出すのは無駄でしょう。アプリケーションを閉じるルーチンは協調的です。メインのメッセージループにメッセージをポストし、アプリケーションが正常にシャットダウンするように要求します。

たとえば、次のコードは、あなたが記述の症状を示すであろう:

procedure TMyForm.Button1Click(Sender: TObject); 
begin 
    while True do 
    Application.Terminate; 
end; 

別の(可能性が高い)可能性あなたがモーダルフォーム内からこの関数を呼び出しますが、モーダルフォームを閉じていないことです。

コードをもっと表示しない限り、私たちはこのような推測をすることになります。

+0

はい、Application.Terminateはforループ内にあり、プロシージャDoSomethingはTActionのイベントハンドラ内から呼び出されます。とにかく、あなたの事例のようなイベントハンドラからどのように出ることができますか? –

+0

現在の関数を終了するにはexit関数を呼び出しますが、チェーンの上位を終了する必要があります。 Abortは別のオプションです。 –

+1

おそらくあなたが呼び出しルーチンを投稿すれば、それに答えることができます。 –

関連する問題