現在、OmniThreadLibrary を試しています。同封されているのは私のコードです:
procedure TMainForm.LongWait;
begin
Task := Parallel.Future<string>(
function: string
begin
Sleep(10000);
Result := 'Done';
end,
Parallel.TaskConfig.OnTerminated(
procedure
begin
if Task.IsDone then
MessageDlg('Complete', mtInformation, [mbOK], 0)
else
MessageDlg('Exception', mtError, [mbCancel], 0)
end)
);
end;
LongWait() を呼び出すと、UI をブロックすることなく正常に動作します。私がやりたいことは次のとおりです。
- 値を待っている間、バックグラウンドでタスクを実行させます
- 例外が発生した場合は、メイン スレッドでキャッチする必要があります
- タスクが完了したかキャンセルされたかをメインスレッドが判断できるようにする
これらすべてを行うノンブロッキング関数を実行することは可能ですか?
前もって感謝します、
V.
編集:質問を追加