C#/C# 강좌
C# BackgroundWorker 사용해서 Zip 압축파일 만들기
RodeJ.H
2016. 5. 13. 17:58
대용량 DB파일을 압축하려니 UI가 응답없음이 걸리는 현상을 해결하기위해서 BackgroundWorker을 사용해서 구현해보았습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
private void DoZip()
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.ProgressChanged += worker_ProgressChanged;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.DoWork += (o, e) =>
{
using (ZipFile zip = new ZipFile())
{
zip.SaveProgress += (o1, e1) =>
{
int percentComplete = (int)((double)e1.BytesTransferred / ((double)e1.TotalBytesToTransfer + 1) * 100);
worker.ReportProgress(percentComplete);
};
foreach (string file in files)
{
zip.AddFile(file);
}
zip.UseZip64WhenSaving = Zip64Option.AsNecessary;
zip.Save(zipFileName);
}
};
worker.RunWorkerAsync();
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int prtPercentage = e.ProgressPercentage;
if (prtPercentage > 100)
prtPercentage = 0;
prg_backupProgress.Value = prtPercentage;
this.lab_backupStr1.Text = string.Format("백업자료를 {0}%압축하고 있습니다.", prtPercentage.ToString());
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Close();
} |
cs |