for I := 0 to int1-1 do
begin
stream:=TMemoryStream.Create;
IdHTTP1.Get(src,stream);
list1.ItemData.Bitmap.LoadFromStream(stream);
FreeAndNil(stream);
end;
現在用idhttp獲取圖片,圖片挺多的。我想問,像在上面的回圈中,是等idhttp成功get到資料后,繼續執行下面的代碼?還是會不等它Get完,直接進入下個回圈?
如何判斷idhttp已經成功get完畢呢?
uj5u.com熱心網友回復:
IdHttp是阻塞的,Get內容完成后才執行下一句。如果get執行時沒出例外情況,你就可認為是執行成功了,否則會拋出例外,對于這種有可能會觸發例外的呼叫,你應該使用例外處理。
uj5u.com熱心網友回復:
例外處理方法,圖片比較多的話,估計會很卡啊,建議加上延時處理。uj5u.com熱心網友回復:
如此回圈,讀入影像,占用記憶體大,易死機。應該設定讀取一定影像后,立即保存,并釋放記憶體。
uj5u.com熱心網友回復:
會阻塞,Get完成后才會繼續。idhttp.OnWork, OnWorkBegin, OnWorkEnd可以知道已經完畢。
如上所說,很容易出錯, 會拋出例外, 加上try
uj5u.com熱心網友回復:
嗯 嗯
uj5u.com熱心網友回復:
idhttp是阻塞式,你上面的代碼如果圖片多,程式會一直無回應直到所有圖片下載結束。這樣用戶感受不好,而且萬一某個圖片不能成功下載,程式就拋出錯誤停止運行。我建議用執行緒來異步下載圖片,每個執行緒下載好后及時釋放記憶體,并做好萬一下載不成功的容錯處理。uj5u.com熱心網友回復:
你這樣就算是加try except也不保險,建議:1、動態建立idhttp
2、用執行緒
否則,很容易出現try都捕捉不了的錯誤。
uj5u.com熱心網友回復:
如樓上所說,如果是多個圖片,最好使用執行緒,在執行緒中動態創建Idhttp組件下載!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/86080.html
標籤:VCL組件開發及應用
