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 :