Hallo zusammen,
anbei eine kurze Frage zum folgenden Problem.
ToDo:
Es sollen Dateien von a nach b kopiert werden
Es soll eine Progressbar angezeigt werden
Es sollen die einzelnen Kopierschritte in einer Listbox ausgegeben werden
Idee:
Der Kopiervorgang muss in einem Thread ausgelagert werden
Die anzuzeigenden Steuerelemente werden ivoked
Quellcode:
-> Diese Methode wird irgendwann mal aufgerufen.
-> In der Start-Methode wird geprüft, ob ein Invoke notwendig ist
-> Die Methoden für den Update
Ergebnis:
Grundsätzlich läuft das alles wunderbar.
ProgressBar wird upgedatet und die Listbox erhält ihre Schritte.
Problem:
Wehe das Fenster verliert den Fokus -> Man klickt z.B. ein anderes Fenster in den Vordergrund oder wechselt mal die Applikation. Ab diesem Zeitpunkt werden die Fortschritte nicht mehr angezeigt. Erst wenn die Applikation komplett ferig ist, werden die Änderungen dargestellt.
Was mache ich falsch? Was muss ich ändern oder beachten?
Vielen Dank euch vorab,
Gruß Marc
anbei eine kurze Frage zum folgenden Problem.
ToDo:
Es sollen Dateien von a nach b kopiert werden
Es soll eine Progressbar angezeigt werden
Es sollen die einzelnen Kopierschritte in einer Listbox ausgegeben werden
Idee:
Der Kopiervorgang muss in einem Thread ausgelagert werden
Die anzuzeigenden Steuerelemente werden ivoked
Quellcode:
-> Diese Methode wird irgendwann mal aufgerufen.
Code:
public void runThread()
{
t = new Thread(new ThreadStart(start));
t.Start();
progMain.Maximum = main.listBoxFiles.CheckedItems.Count;
progMain.Minimum = 0;
}
-> In der Start-Methode wird geprüft, ob ein Invoke notwendig ist
Code:
public void start()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(start));
return;
}
[... Irrelevanter Code ...]
// Irgendwann werden hier die Update-Methoden aufgerufen
mainProgressbar();
updateListbox("irgendeintext");
[... Irrelevanter Code ...]
}
-> Die Methoden für den Update
Code:
private void updateListbox(string value)
{
list.Items.Add(value);
list.Update();
}
private void mainProgressbar()
{
progMain.Value++;
progMain.Update();
}
Ergebnis:
Grundsätzlich läuft das alles wunderbar.
ProgressBar wird upgedatet und die Listbox erhält ihre Schritte.
Problem:
Wehe das Fenster verliert den Fokus -> Man klickt z.B. ein anderes Fenster in den Vordergrund oder wechselt mal die Applikation. Ab diesem Zeitpunkt werden die Fortschritte nicht mehr angezeigt. Erst wenn die Applikation komplett ferig ist, werden die Änderungen dargestellt.
Was mache ich falsch? Was muss ich ändern oder beachten?
Vielen Dank euch vorab,
Gruß Marc