我目前正在試用OmniThreadLibrary。封閉的是我的代碼:使用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(),它工作正常,沒有阻止用戶界面。我想這樣做的是:
- 讓任務在後臺運行,同時等待值
- 如果有異常升高時,我想主線程抓住它
- 允許主線程以確定任務是否完成或取消
是否有可能做一個非阻塞功能,將做所有這些?
謝謝你在前進,
五
編輯:添加的問題
您的博客非常好。這是等待數值沒有阻塞的正確方法嗎? 012W'LongWait; 而不是Task.TryValue(100,Value)do begin Sleep(500); Application.ProcessMessages; 結束; ' –
這是其中一種方式。 – gabr