장시간의 계산을 수행하는 외부 라이브러리를 사용할 때 진행률 표시줄을 표시하여 사용자에게 피드백을 제공하는 것이 유용합니다. WinForms에서는 이러한 목적으로 ProgressBar 컨트롤을 사용할 수 있습니다.
Form 클래스에서 계산이 동기식으로 수행되는 경우 각 계산이 완료된 후 PerformStep() 메서드를 사용하여 ProgressBar를 늘리면 됩니다. 예:
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100000; progressBar1.Step = 1; for(int j = 0; j < 100000; j++) { // Perform calculation progressBar1.PerformStep(); } }</code>
그러나 계산이 외부 메서드에서 비동기적으로 수행되는 경우 해당 메서드에서 ProgressBar를 직접 업데이트할 수 없습니다. 대신 BackgroundWorker 클래스를 사용하여 계산을 수행하고 진행 상황을 UI 스레드에 다시 보고하세요.
BackgroundWorker 클래스를 사용하면 기본 UI 스레드에 진행률 업데이트를 제공하면서 별도의 스레드에서 시간이 많이 소요되는 작업을 수행할 수 있습니다. 여기에는 진행률을 UI 스레드로 다시 보낼 수 있는 ReportProgress 메서드가 있습니다.
다음은 BackgroundWorker를 사용한 예입니다.
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker.RunWorkerAsync(); } private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var backgroundWorker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { // Perform calculation backgroundWorker.ReportProgress(j); Thread.Sleep(100); // 模拟耗时操作 } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
이 예에서는 backgroundWorker_DoWork 메서드에서 계산이 수행되고, backgroundWorker_ProgressChanged 메서드는 UI 스레드에서 ProgressBar를 업데이트하는 데 사용됩니다.
위 내용은 비동기 계산 중에 WinForms ProgressBar를 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!