Erstellen Sie einen Fortschrittsbalken in C#
- Erstellen einer Fortschrittsanzeige in der Windows Forms-App (.NET Framework)
-
Erstellen Sie einen Fortschrittsbalken mit der Klasse
BackgroundWorker
inC#
-
Erstellen Sie einen Fortschrittsbalken mit Text in
C#
Langwierige Dateioperationen und Berechnungen erfordern Fortschrittsanzeigen, und ein Fortschrittsbalken ist die beste Möglichkeit, dem Benutzer Fortschrittsinformationen während einer lang andauernden Operation anzuzeigen. In diesem Tutorial erfahren Sie, wie Sie mit Visual Studio 2022 drei verschiedene Fortschrittsbalken in C# erstellen.
Ein dynamischer Fortschrittsbalken in C# verfügt über zwei Eigenschaften, um seinen Bereich anzugeben (Eigenschaften Maximum
und Minimum
), die hauptsächlich der Anzahl der zu kopierenden Dateien oder auszuführenden Prozesse entsprechen. Wenn ein Prozess abgeschlossen ist und um den Wert des Fortschrittsbalkens zu erhöhen, wird außerdem die Eigenschaft Step
mit der Methode PerformStep
verwendet.
Ein vorgefertigter Fortschrittsbalken in C# kann nur horizontal ausgerichtet werden; Sie können jedoch einen benutzerdefinierten Fortschrittsbalken erstellen, der Ihren Anforderungen entspricht. Der Hauptzweck einer Fortschrittsleiste besteht darin, den Benutzer über den Fortschritt aktuell ausgeführter Aufgaben durch eine C#-Anwendung zu informieren.
Erstellen einer Fortschrittsanzeige in der Windows Forms-App (.NET Framework)
Ein Fortschrittsbalken fungiert als Element der Benutzeroberfläche, das den Fortschritt eines Vorgangs anzeigt. Ein Fortschrittsbalken in C# unterstützt zwei Modi, die den Fortschritt darstellen: unbestimmt und kontinuierlich.
Der unbestimmte Modus für den Fortschrittsbalken ist praktisch, wenn Sie eine Aufgabe oder Operation ausführen, von der Sie nicht wissen, wie lange sie dauern wird. Dies geschieht durch das asynchrone Laden von Daten in einen Hintergrund-Thread (im Allgemeinen mit Hilfe der Klasse BackgroundWorker
), während die C#-Anwendung noch auf den Benutzer reagiert.
Es ist ein gängiges Designparadigma, einen unbestimmten Fortschrittsbalken anzuzeigen, während Daten geladen werden, und wird gesetzt, bis der tatsächliche Fortschritt beginnt. Beim Erstellen eines Fortschrittsbalkens in WinForms ist es wichtig, die Eigenschaft Style
des Fortschrittsbalkens auf Marquee
zu setzen.
Ein Fortschrittsbalken in WPM hat jedoch die Eigenschaft Isdeterminate
, die ähnlich ist wie Style
, und sein Wert als True
funktioniert ähnlich wie Marquee
.
// namespaces for C# windows application (.NET Framework)
using System;
using System.Windows.Forms;
namespace ProgressBarExp {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
// create a `progressBar1` progress bar in your C# project design
private void progressBar1_Click(object sender, EventArgs e) {}
// create a method that performs some calculations
// the progress bar will synch with this method and progress accordingly
private void Caluculate(int i) {
// perform a task
}
// create a `RunOperation` button to perform calculations or take action in your C# project
// design
private void RunOperation_Click(object sender, EventArgs e) {
// set the visibility of progress bar
progressBar1.Visible = true;
for (int j = 0; j < 10000001; j++) {
Caluculate(j);
if (j == 10000000) {
MessageBox.Show("Operation Complete!");
progressBar1.Visible = false;
}
}
}
private void Form1_Load(object sender, EventArgs e) {
// for indeterminate progress using .NET framework
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.Visible = false;
}
}
}
Ausgang:
Ein Fortschrittsbalken erfüllt seinen Zweck nur dann richtig, wenn er den Fortschritt beim Laden Ihrer Daten anzeigt. In C#-Anwendungen sind Fortschrittsbalken beliebt, um Software zu installieren, langwierige Aufgaben auszuführen und zu starten, damit die Benutzer genau wissen, wie viel Zeit ein Prozess dauern wird und wie viel Fortschritt noch verbleibt.
Um einen kontinuierlichen Fortschrittsbalken in C# zu erstellen, entfernen Sie den Code aus dem Ereignis RunOperation_Click
und ersetzen Sie ihn durch den folgenden Code:
private void RunOperation_Click(object sender, EventArgs e) {
progressBar1.Visible = true;
progressBar1.Maximum = 10000000;
progressBar1.Value = 1;
for (int j = 0; j < 10000001; j++) {
Caluculate(j);
if (progressBar1.Value == 10000000) {
MessageBox.Show("Operation Complete!");
progressBar1.Visible = false;
break;
}
// it will measure the progress of the task or operations and progress in regards to the
// completion of a task It only requires if the progress bar style is not set to Marquee
progressBar1.PerformStep();
}
}
Ausgang:
Kommentieren Sie im Ereignis Form1_Load
das progressBar1.Style = ProgressBarStyle.Marquee;
Zeile aus dem C#-Code, und Sie haben einen kontinuierlichen Fortschrittsbalken entsprechend dem Prozentsatz der Aufgabenerfüllung %
.
Erstellen Sie einen Fortschrittsbalken mit der Klasse BackgroundWorker
in C#
Es muss klar sein, wie einfach es ist, einen Fortschrittsbalken in C#-Anwendungen zu verwenden. Jetzt ist es an der Zeit zu untersuchen, wie sich ein Fortschrittsbalken vorwärts bewegt, indem er mit tatsächlicher Arbeit synchronisiert wird und nicht nur mit einem statischen Wert.
Die meisten neuen C#-Entwickler geraten in Schwierigkeiten, wenn sie feststellen, dass Sie nicht gleichzeitig eine Aufgabe ausführen und einen Fortschrittsbalken im selben Thread aktualisieren können. Wenn Sie eine schwere Aufgabe im Benutzeroberflächen-Thread einer C#-Anwendung ausführen und versuchen, den Fortschrittsbalken entsprechend zu aktualisieren, benötigen Sie die Dienste einer BackgroundWorker
-Klasse in C#.
Ohne die Hilfe der Klasse BackgroundWorker
, die einen Fortschrittsbalken ziemlich nutzlos macht. Der Fortschrittsbalken zeigt keine Aktualisierung des Fortschritts an, bevor eine Aufgabe erfolgreich abgeschlossen wurde, und erfordert, dass ein Hintergrundarbeiter beide in einem einzigen Thread gleichzeitig aktualisiert.
Es ist eine ideale Möglichkeit, einen Fortschrittsbalken mit einem Hintergrund zu erstellen, der in C# arbeitet, um eine Aufgabe in einem Worker-Thread auszuführen und dann die Aktualisierung an den Benutzeroberflächen-Thread zu pushen, der den Fortschrittsbalken sofort aktualisiert und diese Aktualisierungen anzeigt.
using System;
using System.Windows;
using System.Threading;
using System.Windows.Forms;
using System.ComponentModel;
namespace ProgressBarExp {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
// create a progress bar in your C# project's Form1.cs [Design]
private void progressBar1_Click(object sender, EventArgs e) {}
// a button to perform an operation synched with the `progressBar1`
private void RunOperation_Click(object sender, EventArgs e) {
BackgroundWorker taskSynch = new BackgroundWorker();
taskSynch.WorkerReportsProgress = true;
taskSynch.DoWork += taskSynch_DoWork;
taskSynch.ProgressChanged += taskSynch_ProgressChanged;
taskSynch.RunWorkerAsync();
}
// Form1 load event
private void Form1_Load(object sender, EventArgs e) {}
// create a method that connects `BackgroundWorker` with a task
void taskSynch_DoWork(object sender, DoWorkEventArgs e) {
for (int i = 0; i < 100; i++) {
(sender as BackgroundWorker).ReportProgress(i);
Thread.Sleep(100);
}
}
// create a method that connects a task with the `progressBar1`
void taskSynch_ProgressChanged(object sender, ProgressChangedEventArgs e) {
progressBar1.Value = e.ProgressPercentage;
}
}
}
Ausgang:
Erstellen Sie einen Fortschrittsbalken mit Text in C#
Im Allgemeinen können Sie einen benutzerdefinierten Fortschrittsbalken erstellen, der Ihnen mehr Kontrolle über seine Konfiguration gibt. Einen C#-Code von Grund auf neu zu schreiben, um einen Fortschrittsbalken zu erstellen, ist jedoch langwierig; Sie können NuGet
-Pakete wie Syncfusion UI Control
oder ShellProgressBar
verwenden, um gebrauchsfertige Fortschrittsbalken mit unglaublichen Designs zu erhalten.
Die einfachste Möglichkeit, einen Fortschrittsbalken mit Text zu erstellen, besteht darin, Beschriftungen zu verwenden und deren Text entsprechend dem Fortschritt einer Aufgabe zu ändern. Sie können seinen Fortschritt mit dem Fortschritt einer Aufgabe synchronisieren.
using System;
using System.Threading;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
namespace ProgressBarExp {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void RunOperation_Click(object sender, EventArgs e) {
BackgroundWorker taskSynch = new BackgroundWorker();
taskSynch.WorkerReportsProgress = true;
taskSynch.DoWork += taskSynch_DoWork;
taskSynch.ProgressChanged += taskSynch_ProgressChanged;
taskSynch.RunWorkerAsync();
}
private void Form1_Load(object sender, EventArgs e) {
// make the percentage label `backcolor` transparent
label1.BackColor = Color.Transparent;
}
void taskSynch_DoWork(object sender, DoWorkEventArgs e) {
for (int i = 0; i < 101; i++) {
(sender as BackgroundWorker).ReportProgress(i);
Thread.Sleep(100);
// to support multi-threading for label1 and label 2
if (label1.InvokeRequired) {
label1.Invoke(new MethodInvoker(delegate {
// shows the progression, it is syched with the task progression
label1.Text = "Progress: " + i + "%";
}));
}
if (label2.InvokeRequired) {
label2.Invoke(new MethodInvoker(delegate {
if (i < 25) {
label2.Text = "Starting the task...";
} else if (i > 25 && i < 50) {
label2.Text = "Half way through...";
} else if (i > 50 && i < 99) {
label2.Text = "The wait will be over soon...";
} else if (i == 100) {
label2.Text = "Task is completed successfully!";
}
}));
}
}
}
void taskSynch_ProgressChanged(object sender, ProgressChangedEventArgs e) {
// it will update the progress bar in real time depends on the progress of a task
progressBar1.Value = e.ProgressPercentage;
}
}
}
Ausgang:
Sie müssen einen progressBar1
-Fortschrittsbalken, eine Run Operation
-Schaltfläche und label1
- und label2
-Labels in Form1 [Design]
Ihres C#-Projekts erstellen, bevor Sie diesen C#-Code ausführen.
In diesem Tutorial haben Sie gelernt, wie Sie verschiedene Arten von Fortschrittsbalken erstellen und sie mit dem tatsächlichen Fortschritt einer Aufgabe mit der Klasse BackgroundWorker
in C# synchronisieren.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub