[C#/WINFORM/.NET5] IProgress<T> 인터페이스 : Report 메소드를 사용해 비동기 작업시 진행 상태 보고하기
C#/WinForm 2021. 6. 27. 02:38728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.executeButton.Click += executeButton_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 실행 버튼 클릭시 처리하기 - executeButton_Click(sender, e)
/// <summary>
/// 실행 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private async void executeButton_Click(object sender, EventArgs e)
{
Progress<int> progress = new Progress<int>();
progress.ProgressChanged += (sender, e) =>
{
this.progressBar.Value = e;
if(e == 100)
{
this.executeButton.Enabled = true;
}
};
this.executeButton.Enabled = false;
await ProcessJobAsync(progress);
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Event
#region 작업 처리하기 (비동기) - ProcessJobAsync(progress)
/// <summary>
/// 작업 처리하기 (비동기)
/// </summary>
/// <param name="progress">진행 인터페이스</param>
/// <returns>태스크</returns>
private static async Task ProcessJobAsync(IProgress<int> progress)
{
int progressRatio = 0;
for(int i = 0; i < 10; i++)
{
// 시간이 걸리는 작업을 실행한다.
await Task.Delay(TimeSpan.FromMilliseconds(1000));
progressRatio += 10;
progress?.Report(progressRatio);
}
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Windows Media Player COM 객체를 사용해 MP3 파일 재생하기 (0) | 2021.07.31 |
---|---|
[C#/WINFORM] SoundPlayer 클래스 : WAV 파일 재생하기 (0) | 2021.07.31 |
[C#/WINFORM] 화면 배율 계수 설정하기 (0) | 2021.07.03 |
[C#/WINFORM] Graphics 클래스 : GetHdc 메소드를 사용해 데스크톱 디바이스 컨텍스트 핸들 구하기 (0) | 2021.07.03 |
[C#/WINFORM] Graphics 클래스 : FromHwnd 정적 메소드를 사용해 데스크톱 Graphics 객체 구하기 (0) | 2021.07.03 |
[C#/WINFORM] 누겟 설치 : ImageProcessor.Plugins.WebP (0) | 2021.05.17 |
[C#/WINFORM] 누겟 설치 : ImageProcessor (0) | 2021.05.17 |
[C#/WINFORM] OpenFileDialog 클래스 : AutoUpgradeEnabled 속성을 사용해 이전 스타일 대화 상자 열기 (0) | 2021.04.30 |
[C#/WINFORM] IWin32Window 인터페이스 : 메시지 박스 최상위 표시하기 (0) | 2021.04.30 |
[C#/WINFORM] Bitmap 클래스 : 스크롤 가능한 육각형 몽타주 비트맵 사용하기 (0) | 2021.04.11 |
댓글을 달아 주세요