Поиск сообщества
Показаны результаты для тегов 'ttask'.
Найдено: 2 результата
-
Помогите разобраться с потоками, ниже приведенный код на виде работает а на андроиде замораживает основной поток, помогите пожалуйста разобраться в чем проблема. procedure TForm2.Button1Click(Sender: TObject); begin TTask.Run( procedure begin TThread.Synchronize(TThread.CurrentThread, procedure begin MediaPlayer1.FileName := 'http://cdndl.zaycev.net/228184/8640962/lana_del_rey_-_hope_is_a_dangerous_thing_for_a_woman_like_me_to_have_but_i_have_it_%28zaycev.net%29.mp3?ext.page=default'; MediaPlayer1.Play; end); end); end; end.
-
Хочу поделится своим модулем, некой альтернативой TTask, которой я пользуюсь уже довольно продолжительное время. Возможно кому то будет полезно. AsyncTask это глобальная функция в модуле, которая возвращает интерфейс IAsyncTask. По этой причине нет нужды специально создавать объект и заботится о его удалении. Пример использования: procedure GetAsyncRequest(const aUrl: string); var LResult: string; begin AsyncTask.Run( procedure begin // это основной метод потока, он не синхронизирован. От сюда нельзя обращатся к визуальным компонентам // или переменным вне функции без синхронизации (если необходимо) LResult := HttpRequest.Get(aUrl); end, procedure begin // Эта процедура выполнится при успешном завершении потока (без exception). // Процедура синхронизированна, по этому тут можно обращатся к любым визуальным компонентам ShowMessage(LResult); end, procedure(E: Exception) begin // Эта процедура выполнится только если во время работы потока произошла ошибка ShowException(E); end, procedure begin // Эта процедура выполнится в любом случае (после завершения потока), в не зависимости была ошибка или нет ShowMessage(LResult); end ); // обратите внимание, что обязательно задать только первую процедуру, остальные можно не указывать или передать вместо них nil. Например так: AsyncTask.Run( procedure begin ... end, nil, procedure(E: Exception) begin ShowException(E); end); Async.Task.pas.zip