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