Delphi TaskCompleted Event (using the Chilkat ActiveX)
Demonstrates the TaskCompleted event callback using the Chilkat Delphi ActiveX:
procedure TForm1.httpProgressInfo(ASender: TObject; const name: WideString; const value: WideString);
begin
// This event callback occurs in the background thread (because the asynchronous
// version of the QuickGetStr method was called (i.e. QuickGetStrAsync)
// UI elements must be updated from the main UI thread...
TThread.Synchronize(nil, procedure begin
Memo1.Lines.Add(name + ': ' + value);
end);
end;
procedure TForm1.httpTaskCompleted(ASender: TObject; const task: IChilkatTask);
begin
// This event callback occurs in the background thread (because the asynchronous
// version of the QuickGetStr method was called (i.e. QuickGetStrAsync)
// UI elements must be updated from the main UI thread...
TThread.Synchronize(nil, procedure begin
Memo1.Lines.Add(task.ResultErrorText);
end);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
http: TChilkatHttp;
success: Integer;
html: WideString;
task: IChilkatTask;
begin
http := TChilkatHttp.Create(Self);
success := http.UnlockComponent('anything for 30-day trial');
if (success <> 1) then
begin
Memo1.Lines.Add(http.LastErrorText);
Exit;
end;
http.OnTaskCompleted := httpTaskCompleted;
http.OnProgressInfo := httpProgressInfo;
// Create a task to do the HTTP GET asynchronously.
task := http.QuickGetStrAsync('http://www.chilkatsoft.com/');
// Start the task in a background thread.
task.Run();
// Warning: If an event callback method calls TThread.Synchronize, then a call to task.Wait will hang
// for the full duration of the timeout specified. (If the wait-forever value of 0 is passed
// to task.Wait, then it will hang forever.) This is because the call to TThread.Synchronize is waiting
// for the main thread's event loop. Control is not returned to the main event loop until this
// TForm1.Button2Click returns -- thus there is a deadlock. There is no deadlock when a program
// Waits on a task and there are no event callbacks that call TTHread.Synchronize.
//task.Wait(5000);
end;
admin
0
Tags :