142 lines
4.2 KiB
C#
142 lines
4.2 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BokBonCheck
|
|
{
|
|
public partial class DownloadProgressForm : Form
|
|
{
|
|
private ProgressBar progressBar;
|
|
private Label lblStatus;
|
|
private Label lblProgress;
|
|
private Button btnCancel;
|
|
private bool isCancelled = false;
|
|
|
|
public DownloadProgressForm()
|
|
{
|
|
InitializeComponent();
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.Text = "Chrome 드라이버 다운로드";
|
|
this.Size = new Size(400, 150);
|
|
this.StartPosition = FormStartPosition.CenterParent;
|
|
this.FormBorderStyle = FormBorderStyle.FixedDialog;
|
|
this.MaximizeBox = false;
|
|
this.MinimizeBox = false;
|
|
this.ControlBox = false;
|
|
this.TopMost = true;
|
|
|
|
// 상태 라벨
|
|
lblStatus = new Label
|
|
{
|
|
Text = "Chrome 드라이버를 확인하고 있습니다...",
|
|
Location = new Point(20, 20),
|
|
Size = new Size(360, 20),
|
|
Font = new Font("맑은 고딕", 9),
|
|
TextAlign = ContentAlignment.MiddleCenter
|
|
};
|
|
|
|
// 진행률 라벨
|
|
lblProgress = new Label
|
|
{
|
|
Text = "0%",
|
|
Location = new Point(20, 50),
|
|
Size = new Size(360, 20),
|
|
Font = new Font("맑은 고딕", 10, FontStyle.Bold),
|
|
TextAlign = ContentAlignment.MiddleCenter,
|
|
ForeColor = Color.Blue
|
|
};
|
|
|
|
// 프로그레스 바
|
|
progressBar = new ProgressBar
|
|
{
|
|
Location = new Point(20, 80),
|
|
Size = new Size(360, 25),
|
|
Style = ProgressBarStyle.Continuous,
|
|
Minimum = 0,
|
|
Maximum = 100,
|
|
Value = 0
|
|
};
|
|
|
|
// 취소 버튼
|
|
btnCancel = new Button
|
|
{
|
|
Text = "취소",
|
|
Location = new Point(150, 115),
|
|
Size = new Size(100, 30),
|
|
Font = new Font("맑은 고딕", 9),
|
|
BackColor = Color.LightCoral
|
|
};
|
|
|
|
btnCancel.Click += BtnCancel_Click;
|
|
|
|
// 컨트롤 추가
|
|
this.Controls.AddRange(new Control[]
|
|
{
|
|
lblStatus, lblProgress, progressBar, btnCancel
|
|
});
|
|
}
|
|
|
|
private void BtnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
isCancelled = true;
|
|
btnCancel.Enabled = false;
|
|
lblStatus.Text = "취소 중...";
|
|
}
|
|
|
|
public bool IsCancelled => isCancelled;
|
|
|
|
public void UpdateProgress(int percentage, string status = null)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new Action<int, string>(UpdateProgress), percentage, status);
|
|
return;
|
|
}
|
|
|
|
progressBar.Value = Math.Min(percentage, 100);
|
|
lblProgress.Text = $"{percentage}%";
|
|
|
|
if (!string.IsNullOrEmpty(status))
|
|
{
|
|
lblStatus.Text = status;
|
|
}
|
|
}
|
|
|
|
public void SetCompleted(string message = "다운로드 완료!")
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new Action<string>(SetCompleted), message);
|
|
return;
|
|
}
|
|
|
|
progressBar.Value = 100;
|
|
lblProgress.Text = "100%";
|
|
lblStatus.Text = message;
|
|
btnCancel.Text = "확인";
|
|
btnCancel.BackColor = Color.LightGreen;
|
|
btnCancel.Enabled = true;
|
|
}
|
|
|
|
public void SetError(string errorMessage)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
this.Invoke(new Action<string>(SetError), errorMessage);
|
|
return;
|
|
}
|
|
|
|
lblStatus.Text = "오류 발생";
|
|
lblProgress.Text = "실패";
|
|
lblProgress.ForeColor = Color.Red;
|
|
btnCancel.Text = "확인";
|
|
btnCancel.BackColor = Color.LightCoral;
|
|
btnCancel.Enabled = true;
|
|
}
|
|
}
|
|
} |