Back to top

Progress<T>를 사용해서 진행도 표시

작성날짜 2025/05/19

코드


//XAML
    <Grid>
        <TextBlock Name="tbProgress"/>
        <ProgressBar Name="ProgressBar" Width="300" Height="30"/>
    </Grid>


//코드 비하인드

    public MainWindow()
    {
        InitializeComponent();
    }


    static async Task TestAsync(IProgress<int> progress)
    {
        for (int i = 0; i <= 100; i += 10)
        {
            await Task.Delay(500); // 작업 시뮬레이션
            progress.Report(i); // 진행률 보고
        }
    }


    private async void Window_Loaded(object sender, RoutedEventArgs e)
    {
        IProgress<int> progress = new Progress<int>(prog =>
        {
            // UI 스레드에서 진행률 업데이트
            ProgressBar.Value = prog;
            tbProgress.Text = $"{prog}%";
        });


        await TestAsync(progress);
    }


결과


article_img_2_rte_image_42.png

오래 걸리는 작업(TestAsync)은 테스크로 처리되어 UI 스레드가 막히지 않는다.



위 코드는 너무 간단해서 오히려 어렵게 느껴질 지경인데

progress.Report(i)로 진행도를 보고 하면 new Progress(Action handler)에서 넘겨준 Action이 실행된다.


관련글

[WPF] 데이터 소스 변경에 반응하기Icon 경로 설정
Progress<T>를 사용해서 진행도 표시
An unhandled error has occurred. Reload 🗙