Update-Fortschrittsbalken in anderer form während der task ausgeführt wird

**Letztlich werde ich haben vier Aufgaben gleichzeitig ausgeführt und haben eine andere form, die enthält vier Balken. Ich möchte für jede Fortschrittsbalken zu aktualisieren, wie es die Arbeit abschließen.

Hier ist, was ich versuche zu tun, für den Anfang.

Ich habe ein Formular mit einigen Tasten auf. Wenn ich auf ein ich bin die Erstellung einer neuen Aufgabe um einige Arbeit zu tun.

public partial class MyMainForm : Form
{

    private void btn_doWork_Click(object sender, EventArgs e)
    {
        Task task = new Task(RunComparisons);
        task.Start();
    }

    private void RunComparisons()
    {
        int progressBarValue = 0;
        MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
        pBar.ShowDialog();
        foreach(string s in nodeCollection)
        {
            //do some work here
            progressBarValue++;
            pBar.updateProgressBar(progressBarValue, "some new text");
        }
        pBar.BeginInvoke(new Action(() => pBar.Close()));
    }
}

In eine Klasse, die enthält ein Formular mit einem Fortschrittsbalken:

public partial class MyProgressBarForm : Form
{
    public MyProgressBarForm(int maxValue, string textToDisplay)
    {
        InitializeComponent();
        MyProgressBarControl.Maximum = maxValue;
        myLabel.Text = textToDisplay;
    }

    public void updateProgressBar(int progress, string updatedTextToDisplay)
    {
        MyProgressBarForm.BeginInvoke(
            new Action(() =>
            {
                MyProgressBarControl.Value = progress;
                myLabel.Text = updatedTextToDisplay;
            }));
    }

Wenn ich auf die doWork-Taste der Fortschrittsbalken form zeigt, aber nicht aktualisieren. Es sitzt nur da und hängt. Wenn ich kommentiere die pBar.ShowDialog(); dann wird der Fortschrittsbalken Formular nicht angezeigt wird, aber die Arbeit getan werden, bis zum Abschluss ausgeführt wird perfekt.

Hatte ich dieses perfekt funktioniert, wenn ich Schaffe meine eigenen threads, aber ich lese über Aufgaben und jetzt bin ich versucht, diese zu führen, dass Art und Weise. Wo habe ich bloß falsch gemacht?

Don ' T erstellen Sie Ihre forms/controls in einer hintergrund-task/thread. Wenn Sie das tun, dann haben Sie, um eine Nachricht zu erstellen-Pumpe für solche threads.
würden Sie zufällig ein Beispiel dafür?
Haben Sie sich überlegt mit einem BackgroundWorker? Es scheint ein guter Anwendungsfall

InformationsquelleAutor UmarSlobberknocker | 2015-02-13

Schreibe einen Kommentar