TreeView項目和數據包含文件名,數據包含TBitmap。我的問題涉及以某種方式將項目和數據保存在樹視圖中,以便項目和數據可以在線程中訪問。如果可以,保存項目和數據後,我可以訪問線程中的項目和數據,而不是在Synchronize中訪問它。由於現在編寫的代碼太慢,因爲訪問GUI TreeItems和Data in Synchronize。有沒有辦法保存Treeview的項目和數據,以便可以在線程中訪問它?
if not Terminated then
begin
Synchronize(
procedure
var
i: integer;
begin
for i := 1 to Form1.TreeView1.Items.Count - 1 do
begin
{ get the bitmap }
iImageEnIO.WIAParams.ProcessingBitmap := iImageEnIO.IEBitmap;
{ The following line prevents me from accessing the TreeView data in a thread }
iImageEnIO.WIAParams.Transfer(TIEWiaItem(Form1.TreeView1.Items[i].Data), False);
{ Set the filename }
iFilename := Form1.TreeView1.Items[i].Text + '.jpg';
{ Add the image to the iIEImageList }
iIndex := iIEImageList.AppendImageRef(TIEBitmap.Create(iImageEnIO.IEBitmap), iFileName);
iIEImageList.Filename[iIndex] := iFileName;
end;
end);
的線程代碼訪問的位圖線程本身工作得非常好,但如果我可以移動獲取位圖到線程的代碼,而不是在同步會好得多。所以我的問題是「有沒有辦法在Synchronize中保存樹視圖項和數據,以便可以在Synchronize之外的線程中訪問」?
iImageEnIO.OnProgress := ImageEnProcProgress;
iImageEnIO.OnFinishWork := ImageEnProcFinishWork;
{ Get the bitmap from the imagelist and save the image in the thread }
iCount := iIEImageList.ImageCount;
for j := 0 to iCount-1 do
begin
{ get the filename from the string list }
iFilename := iIEImageList.Filename[j];
{ attach the iIEBitmap2 to iImageEnIO }
iImageEnIO.AttachedIEBitmap := iIEImageList.Image[j];
iPath := IncludeTrailingPathDelimiter(iFolder) + iFilename;
iImageEnIO.SaveToFile(iPath);
end;
我希望我已經正確地問了我的問題,並且很清楚我想要做什麼。
如果我正確理解你的問題,我不需要保存後訪問位圖。我只需要能夠訪問節點項目以獲取文件名並將該位圖添加到iIEImageList,然後再將該文件保存到線程中的磁盤。 – Bill