我目前正在试用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