Laden...

progressBar bei aufwendigen Anwendungen

Letzter Beitrag vor 15 Jahren 3 Posts 823 Views
progressBar bei aufwendigen Anwendungen

Guten Morgen!

ALso mein Problem ist, das ich mit c# über eine API ein projekt erstelle! Da dieses jedoch sehr zeitaufwendig ist würde ich gerne eine progressBar implementieren.

Mein erster gedanke war die progbar in einer eigenen Form zu starten, aber natürlich bleibt auch die hängen bis das Projekt fertig gestellt wurde.

Zweiter Gedanke war threads, aber auch da änderte sich nicht viel, vielleicht liegts aber auch nur an meiner weise wie ich die progbar eingebunden haben...

nämlich nur einen neuen Thread mit der Methode

 private void StartProgressBar()
        {
            frmProgBar progBar = new frmProgBar();
            progBar.Show();

        }

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

using System
using System.Windows.Forms;

namespace MyProject.Forms
{
    // Form mit ProgressBar
    public sealed partial MyForm : Form
    {
        // Konstruktor, etc. der Einfachheit halber weggelassen

        public void PerformProgressBarStep()
        {
            _prgMyProgressBar.PerformStep();
        }

        public void InitProgressBar(int min, int max, int val)
        {
            _prgMyProgressBar.Minimum = min;
            _prgMyProgressBar.Maximum= max;
            _prgMyProgressBar.Value = val;
        }
    }
}
using System;
using System.Threading;
using System.Windows.Forms;

namespace MyProject.Forms
{
    // Hauptformular
    public sealed partial MyMainForm : Form
    {
        // Delegat für Rückmeldung aus dem Thread
        private delegate void PerformProgressBarStepCallback();

        // Formular mit Progress Bar
        private volatile MyForm m_oMyPrgForm;

        // Konstruktoren, etc. der Einfachheit halber weggelassen.

        private void MyThreadStartingMethod()
        {
            // ...
            m_oMyPrgForm = new MyForm();
            m_oMyPrgForm.InitProgressBar(0, 100, 0);
            Thread oMyThread = new Thread(MyThreadUsingProgressBar);
            oMyThread.Start();
            // ...
        }

        private void MyThreadUsingProgressBar()
        {
            for (int i = 0; i < 100; i++)
            {
                this.Invoke(new PerformProgressBarStepCallback(m_oMyPrgForm.PerformProgressBarStep));
            }
        }
    }
}

Natürlich kannst du so auch übergeben. Du musst lediglich den Delegaten auf deine Aufzurufende Methode anpassen:

private delegate int MyTestDelegate(int, string);

// ...

int iMyRetVal = (int)this.Invoke(new MyTestDelegate(DoSomething), new object[] { 0, "Blub" });