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:
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);
}
}
}
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
Ein Timer ist denke ich das, was du suchst.
Außerdem solltest du das Wait-Fenster nicht immer neu instanzieren...
Gruß, Christian.
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.
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)).