Laden...

waitwindow- progressbar über delegate erweitern / backgroundworker

Erstellt von novac81 vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.318 Views
Thema geschlossen
N
novac81 Themenstarter:in
1 Beiträge seit 2013
vor 11 Jahren
waitwindow- progressbar über delegate erweitern / backgroundworker

Hallo liebe Community,

ich möchte folgenden Sachverhalt implementieren, weiss aber nicht genau wie.

Ich habe eine Forms Anwendung mit einer Progressbar und einem Button "Starten".
Wenn ich auf den Button Starten klicke möchte ich, dass jede Sekunde 5% bei der Progressbar hinzu kommt.. dies möchte ich allerdings über einen delegate lösen, hänge aber fest.

Ich habe zwei Klassen erstmal,die wichtig sind:

  1. Die Klasse wait, in ihr möchte ich den delegaten erzeugen und die Methode zum Erhöhen der Progressbar und 1 sek dazwischen warten

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WaitingWindow
{
    delegate void Del(int x);
    class Wait
    {
        public void upgradeProgress(int x)
        {
            Form1 form = new Form1();
            form.progressBar1.Value += x;
            System.Threading.Thread.Sleep(1000);
        }
    }
}


  1. Meine Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WaitingWindow
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void progressBar1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
           // while (progressBar1.Value <= 95)
            //{
                Wait wait = new Wait();
                Del d = wait.upgradeProgress;
                d(5);
           // }
        }
    }
}

Ich weiss nun nicht, wie ich den background worker im button1_click aufrufe.. habe mir schon Sachen durchgelesen komme aber nicht drauf, wie das mit dem Delegate geht.

Danke für jede Hilfe,
Gruss Novac

795 Beiträge seit 2006
vor 11 Jahren

Ein Timer ist denke ich das, was du suchst.

Außerdem solltest du das Wait-Fenster nicht immer neu instanzieren...

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
B
357 Beiträge seit 2010
vor 11 Jahren

Zum einen sind solche festen Progresszeiten völliger Unfug, da man da immer gleich lang wartet, egal, ob noch was gemacht wird oder nicht. Zum anderen solltest du da mal die Dokumentation des Backgroundworkers anschauen, da steht nämlich drin, dass man den Worker mit .RunWorkerAsync() starten kann.

Dafür braucht es aber keinen Backgroundworker. Wie schon gesagt wurde, kann das mit einem Timer erledigt werden, sehr bequem und schnell.

Thread.Sleep ebenfalls weglassen, das hat da nichts zu suchen.

Hinweis von herbivore vor 11 Jahren

Neben der Tatsache, dass man besser einen Timer nimmt, scheint mir der Rest eher unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und [FAQ] Kommunikation von 2 Forms zu fallen (evtl. kombiniert mit [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)).

Thema geschlossen