TThread
例外が発生した場合、例外のクラスとメッセージを 2 つのプライベート フィールドに保存する子孫クラスを作成しました。
private
//...
FExceptionClass: ExceptClass; // --> Class of Exception
FExceptionMessage: String;
//...
raise
メインスレッドがそれを処理できるように、イベントで同様の例外が発生する可能性があると思いOnTerminate
ました (ここでは簡略化したバージョンを示します)。
procedure TMyThread.Execute;
begin
try
DoSomething;
raise Exception.Create('Thread Exception!!');
except
on E:Exception do
begin
FExceptionClass := ExceptClass(E.ClassType);
FExceptionMessage := E.Message;
end;
end;
end;
procedure TMyThread.DoOnTerminate(Sender: TObject);
begin
if Assigned(FExceptionClass) then
raise FExceptionClass.Create(FExceptionMessage);
end;
標準の例外処理メカニズム (エラー ダイアログ ボックス) が発生することを期待していますが、さまざまな結果が得られます。例外が発生しなかったかのようにオンになります。
問題はコールスタックに関するものだと思います。
それは悪い考えですか?
スレッドの例外をメインスレッドから分離するが、それらを標準的な方法で再現する別の方法はありますか?
ありがとうございました