Merhabalar Delphi dilini bilmem ama yardımı dokunacaksa söyle birşey deneyebilirsiiniz. ( konudaki kod bloğuna göre yorum ve açıklama )
Yaşadığınız donma sorunu, dosya kopyalama işlemlerinin bir döngü içinde sırayla yapılıyor olmasıyla ilgili olabilir. Döngünün her bir yinelemesi sırasında, uygulama bir sonraki dosyaya geçmeden önce CopyFile işlevinin tamamlanmasını bekliyor olabilir. Bu durum, özellikle çok sayıda dosya varsa veya kopyalama işlemi önemli miktarda zaman alıyorsa, uygulamanızın yanıt vermemesine neden olabilir.
Kullanıcı arayüzünün donmasını önlemek için, dosya kopyalama işlemlerini eşzamansız olarak gerçekleştirmeli ve böylece kopyalama işlemi sırasında uygulamanın yanıt vermeye devam etmesini sağlamalısınız. Bunu başarmanın bir yolu iş parçacıkları kullanmaktır. İşte Delphi'deki TThread sınıfını kullanan basitleştirilmiş bir örnek:
procedure TCopyFilesThread.Execute;
var
F: TSearchRec;
begin
try
if FindFirst(FSourceDirectory + '\*.*', faAnyFile, F) = 0 then
begin
repeat
Synchronize(
procedure
begin
try
CopyFile(PChar(FSourceDirectory + '\' + F.Name),
PChar(FDestinationDirectory + '\' + F.Name), True);
Memo1.Lines.Add(F.Name + '-' + IntToStr(F.Size) + '-' +
DateTimeToStr(F.TimeStamp));
WriteToLog(F.Name + '-' + IntToStr(F.Size) + '-' +
DateTimeToStr(F.TimeStamp));
Memo1.Lines.Add(YedekDetayKaydet(DateToStr(DateTimePicker1.Date),
F.Name, RadioGroup1.Items[RadioGroup1.ItemIndex],
DateTimeToStr(F.TimeStamp), IntToStr(F.Size)));
ProgressBar1.StepBy(1);
except
on E: Exception do
// Handle exceptions here if needed
end;
end);
until FindNext(F) <> 0;
end;
finally
FindClose(F);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Create and start the thread
FCopyFilesThread := TCopyFilesThread.Create(True);
FCopyFilesThread.FreeOnTerminate := True;
FCopyFilesThread.Priority := tpNormal;
FCopyFilesThread.Resume;
end;