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" });