我有一個安裝了全局異常處理程序的主應用程序。現在,對於在另一個線程中引發的一些特定異常,我希望調用全局異常處理程序。但它只處理來自主線程的異常。我也試圖從內螺紋以下,但它不工作之一:在全局異常處理程序中處理線程異常?
RunInMainThread (procedure
begin
raise EExceptionFromWithinThread.Create;
end);
其中RunInMainThread
只是執行給定在主線程的上下文參數匿名方法。
爲什麼不能正常工作?處理這種情況的正確方法是什麼?
我不明白你想要做什麼。一個異常意味着將當前執行點留給引發異常的第一個匹配處理程序,可能會在進程中解除堆棧。在另一個線程中同步調用異常處理程序有什麼意義,然後繼續下一行代碼?當然有更合適的方式將信息發送到主線程。這看起來像是濫用我的異常。 – mghie 2010-09-03 13:31:39
我在說定期檢查網絡連接的線程中的'ELostConnection'異常。這個用例對我來說很自然。我需要的是一種全局異常處理程序,它處理來自所有線程的異常... – jpfollenius 2010-09-03 13:46:16
這是異常濫用。到任何東西到達主線程時,它不再是一個例外。主線程必須顯式檢查來自其他線程的消息。當它發現這個「raise exception」命令時,它會運行它,捕獲異常,運行全局處理程序,然後從停止的地方繼續(可能調用GetMessage)。主線程不會被中斷,發送線程也不會做太多。在發送線程中,像往常一樣引發異常。在OnTerminate事件中,檢查'FatalException'並在那裏處理它。 – 2010-09-03 14:27:40