BackgroundWorker로 컨트롤에 접근하기 입니다.
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace ThreadTest
{
/// <summary>
/// 메인폼 클래스 입니다.
/// </summary>
public partial class MainForm : Form
{
#region Fields
/// <summary>
/// 백그라운드 워커 입니다.
/// </summary>
private BackgroundWorker backgroundWorker;
#endregion
// Construcotr (Public)
#region MainForm() - 생성자 입니다.
/// <summary>
/// 생성자 입니다.
/// </summary>
public MainForm()
{
InitializeComponent();
#region 이벤트를 설정합니다.
this.backgroundWorker = new BackgroundWorker();
this.backgroundWorker.WorkerReportsProgress = true;
this.backgroundWorker.WorkerSupportsCancellation = true;
this.startButton.Click += startButton_Click;
this.backgroundWorker.DoWork += backgroundWorker_DoWork;
this.backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
this.backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
#endregion
}
#endregion
// Event Method (Private)
#region startButton_Click(sender, e) - 시작 버튼 클릭시 동작합니다.
/// <summary>
/// 시작 버튼 클릭시 동작합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void startButton_Click(object sender, EventArgs e)
{
this.backgroundWorker.RunWorkerAsync();
this.Enabled = false;
}
#endregion
#region backgroundWorker_DoWork(sender, e) - RunWorkerAsync()가 호출될 때 발생합니다.
/// <summary>
/// RunWorkerAsync()가 호출될 때 발생합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
for(int i=0; i<10; i++)
{
this.backgroundWorker.ReportProgress(i);
Thread.Sleep(1000);
}
}
#endregion
#region backgroundWorker_ProgressChanged(sender, e) - ReportProgress(Int32)가 호출될 때 발생합니다.
/// <summary>
/// ReportProgress(Int32)가 호출될 때 발생합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.numberDisplayTextBox.Text = e.ProgressPercentage.ToString();
}
#endregion
#region backgroundWorker_RunWorkerCompleted(sender, e) - 백그라운드 작업이 완료되거나 취소되거나 예외를 발생시켰을 때 발생합니다.
/// <summary>
/// 백그라운드 작업이 완료되거나 취소되거나 예외를 발생시켰을 때 발생합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Enabled = true;
}
#endregion
}
}
728x90
'C# > Winform' 카테고리의 다른 글
C# / Winform 다른 객체의 속성을 ListBox로 불러올 때 정상적으로 값이 출력 안될 때 해결방법 입니다. (0) | 2019.06.02 |
---|---|
C# / Winform ListBox 데이터 소스에 바인딩 안될 때 해결방법 입니다. (0) | 2019.06.02 |
C# / Winform Thread 사용 시 컨트롤에 접근하기. (0) | 2019.05.29 |
C# / Winform KeyDown 이벤트 동작 시 반응이 없을때. (1) | 2019.05.26 |
C# / Winform 폰트 변경 시 트루타입이 아니라 폰트 변경 안될때. (1) | 2019.05.26 |
댓글