Hallo,
ich versuche z.Zt. eine CF-Anwendung zu programmieren, die beim Start verschiedene Einstellungen über einen Webservice aus einer DB lädt. Vor diesem Prozess(Thread) soll ein anderer Thread gestartet werden, der den Verlauf des Ladevorgangs mittels einer ProgressBar anzeigt. Mittels Invoke und den dazugehörigen Events versuche ich nun die Threads zu steuern, was aber bis jetzt leider nicht zum Erfolg geführt hat.
Vielleicht kann mir ja hier jemand helfen?
Danke.
...
ich versuche z.Zt. eine CF-Anwendung zu programmieren, die beim Start verschiedene Einstellungen über einen Webservice aus einer DB lädt. Vor diesem Prozess(Thread) soll ein anderer Thread gestartet werden, der den Verlauf des Ladevorgangs mittels einer ProgressBar anzeigt. Mittels Invoke und den dazugehörigen Events versuche ich nun die Threads zu steuern, was aber bis jetzt leider nicht zum Erfolg geführt hat.
Vielleicht kann mir ja hier jemand helfen?
Danke.
Code:
public Form_KeKa(Mitarbeiter arg1, Tisch arg2 ,WebserviceKeKa arg3)
{
this.m_Mitarbeiter = arg1;
this.m_Tisch = arg2;
this.m_WebserviceKeKa = arg3;
//Event-Handler
this.Resize += new EventHandler(this.Form_Resize);
//Methoden
InitializeComponent();
Thread t1 = new Thread(new ThreadStart(OnShowProgressBar));
t1.Start();
Thread t2 = new Thread(new ThreadStart(OnFillProgressBar));
t2.Start();
Initialize_Panel_Main();
//Attribute
//SHFullScreenHelper.ShowSIPButton(this, false);
//Controlls
this.Controls.Add(this.m_Panel_Main);
Keyboard k = new Keyboard(this);
this.Controls.Add(k);
}
delegate void ShowProgressBar();
private void OnShowProgressBar()
{
if (this.s_Form_Progress.InvokeRequired)
{
this.s_Form_Progress.Invoke(new ShowProgressBar(OnShowProgressBar));
return;
}
this.s_Form_Progress.ShowDialog();
}
delegate void FillProgressBar();
private void OnFillProgressBar()
{
if (this.s_Form_Progress.InvokeRequired)
{
this.s_Form_Progress.Invoke(new FillProgressBar(OnFillProgressBar));
return;
}
for (int i = 0; i < 100; i++)
{
Thread.Sleep(20);
OnUpdateProgressBar(i);
}
OnFinished(null, null);
}
delegate void UpdateProgressBar(int i);
private void OnUpdateProgressBar(int i)
{
if (s_Form_Progress.InvokeRequired)
{
s_Form_Progress.Invoke(new UpdateProgressBar(OnUpdateProgressBar), new object[] { i });
return;
}
if (i < s_Form_Progress.ProgressBar.Maximum)
{
s_Form_Progress.ProgressBar.Value = i;
}
}
delegate void FinishedProgressBar(object sender, EventArgs e);
private void OnFinished(object sender, EventArgs e)
{
if (s_Form_Progress.ProgressBar.InvokeRequired)
{
s_Form_Progress.Invoke(new FinishedProgressBar(OnFinished));
return;
}
s_Form_Progress.Close();
}