! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

데이터를 로드하는 동안 진행률바(Progress Bar) 표시(WinForms 및 WPF) > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

데이터를 로드하는 동안 진행률바(Progress Bar) 표시(WinForms 및 WPF)

페이지 정보

작성자 GrapeCity 작성일 2020-11-10 14:03 조회 11,652회 댓글 0건

본문

응용 프로그램을 설계할 때는 응용 프로그램이 항상 사용자에게 응답할 수 있도록 데이터 로딩을 처리하는 방법에 대해 고려해야 합니다. 일반적으로는 백그라운드 스레드에서 비동기적으로 데이터를 로드하지만, 그동안 사용자는 계속 응용 프로그램과 상호 작용할 수 있습니다.

문제는 적절한 시각화가 표시되지 않아 사용자가 무슨 일이 일어나고 있는지 궁금할 수도 있다는 것입니다. 따라서 어떤 활동이 백그라운드에서 실행되고 있음을 나타내는 진행률 표시줄을 사용하게 됩니다.

데이터가 로드되면 진행률 표시줄이 숨겨지고 데이터를 표시하는 관련 컨트롤이 나타납니다.

데이터를 로드하는 동안 진행률 대화 상자 표시

WinForms 및 WPF에서 진행률 표시줄을 사용하는 몇 가지 예를 살펴보겠습니다.


확정되지 않은 진행률 표시줄

첫 단계는 평소보다 로드 시간이 길어지더라도 응용 프로그램 UI가 계속 응답할 수 있도록 데이터를 비동기적으로 로드하는 것입니다. 대기된 메서드 호출을 사용하여 .NET에서 쉽게 처리됩니다. 다시 말하면, 대기 이후에 발생되는 코드는 작업이 완료되기 전까지는 실행되지 않습니다. 아래에서 보시는 것 같이 가장 쉬운 솔루션입니다.

private async Task LoadData()
{
      // show progress bar
      progressBar1.Visible = true;
      await LoadDataAsync();
      // hide progress bar
      progressBar1.Visible = false;
}


사용자는 데이터 로드를 기다리기 전에 진행률 표시줄 가시성을 설정하고, 작업이 완료되면 보이지 않게 설정하기만 하면 됩니다. 이것은 진행률 표시줄이 “확정되지 않은” 상태인 경우에 효과적입니다. 다시 말해, 중지할 때까지 무한대로 로딩 애니메이션을 반복 실행합니다.

최근 데이터가 로딩될 때 확정되지 않은 진행률 표시줄 또는 링을 표시하는 것이 일반적인 디자인 패러다임입니다. 이는 예측할 수 없는 네트워크 상황에서 시간이 얼마나 걸릴지 정확히 알 수 없기 때문에 많이 사용됩니다. 호출하는 서버가 실행 시간이 얼마나 걸릴지 알려줄 수 없거나 알려주지 않으려 할 수도 있습니다.

WinForms에서 확정되지 않은 진행률 표시줄을 만들려면 Style 속성을 Marquee로 설정합니다. WPF에서는 IsIndeterminate 속성을 True로 설정합니다.


연속적인 진행률 표시줄

확정되지 않은 진행률 표시줄의 단점은 시간이 얼마나 남아 있는지 사용자가 알지 못한다는 것입니다. 대안은 데이터가 로드될 때 진행률 표시줄에 진행 상태를 보고하는 것입니다. 소프트웨어를 설치할 때 진행이 얼마나 남았는지(그리고 때로는 시간이 얼마나 남았는지) 정확히 알 수 있어 이 방법을 많이 사용합니다. 이는 데이터 솔루션에 따라 그리고 데이터 로드 중에 사용할 수도 있습니다.

데이터를 로드하는 동안 진행률 대화 상자 표시

코드 대기가 아니라 진행률 표시줄 업데이트를 완벽히 제어할 수 있는 백그라운드 작업기를 사용하는 코드 예제를 살펴보겠습니다.

BackgroundWorker worker = new BackgroundWorker();
​
public App()
{
  InitializeComponent();
​
  // set background worker
  worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
  worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
  worker.DoWork += new DoWorkEventHandler(worker_DoWork);
  worker.WorkerReportsProgress = true;
​
}


백그라운드 작업기를 설정하려면 ProgressChanged, RunWorkerCompleted 및 DoWork 이벤트를 수신해야 합니다.

각각의 경우 수행할 작업은 다음과 같습니다.

  • DoWork: 응용 프로그램의 실제 작업(예: 데이터 로드)을 수행하고, 가능한 경우 ReportProgress 메서드를 사용하여 진행률 표시줄에 진행률을 보고합니다. 그러면 ProgressChanged 이벤트가 트리거됩니다. 데이터를 로드하는 경우 청크로 로드하면서 중간에 진행률을 보고합니다.

  • ProgressChanged: 진행률 표시줄의 실제 값을 업데이트합니다. 이 이벤트는 매개 변수를 허용하므로 워크로드에 따라 가변적인 양을 전달할 수 있습니다.

  • RunWorkerCompleted: 진행률 표시줄 숨기기 또는 사용자에게 메시지 표시 등 진행률을 마무리합니다.

이 전체 프로세스를 시작하려면 RunWorkerAsync 메서드를 호출하기만 하면 됩니다.

// run background worker
worker.RunWorkerAsync();  


전체 예제를 보려면 WinForms Control Explorer에서 “Performance” FlexGrid 데모를 확인하십시오.


WPF에 대한 사용자 정의 진행률 표시줄

ComponentOne은 WPF에 대한 사용자 정의 진행률 표시줄 컨트롤을 제공합니다. C1ProgressBar 컨트롤은 최신 사용자 환경을 제공하기 위해 Windows 8-10에 사용된 기본 진행률 표시기를 본떠 모델링했습니다. 확정되지 않은 작업이 진행 중임을 나타내기 위해 애니메이션 반복 패턴으로 이를 표시할 수 있습니다. 또한 C1ProgressIndicator 컨트롤은 로딩 링을 표시합니다.

데이터를 로드하는 동안 진행률 대화 상자 표시

C1ProgressBar 및 C1ProgressIndicator 컨트롤을 C1.WPF 핵심 라이브러리의 일부로 다운로드할 수 있습니다.

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.