Hallo Leute,
ich schreib gerade ein Tool das komplexe Kopiervorgänge aufgrund von spziellen Datei-Eigenschaften vornimmt.
Das Tool soll als Forms und Console laufen. Soweit geht es auch. Natürlich hab ich ein LIstView eingebaut das in der Form dann auch eine Ausgabe für jede kopierte Datei erzeugt, aber selbst mit INVOKE will das keine Updates machen.
Das Kopieren nimmt eine Klasse vor die doCopy heisst und mit einer Methode start() ausgestattet ist.
Nun soll die GUI sich bei Inhalt in tAusgabe den String holen und diesen danach löschen.
Im Windows Projekt wird die Methode .start vom Objekt doCopy. mit folgendem Code in einem Thread gestartet
Soweit so gut. Nun noch die Methode für das Schreiben in meine ListView .doUpdate
Läuft alles sauber. Aber bis meine Methode doCopy.start() fertig ist (aktuell nur eine lange Zählschleife) sehe ich nur das der Scrollbalken größer wird aber keine Texte in der Listview. Muss ich etwas anderes Invoken? Oder Liege ich vollkommen falsch?
cu s00n
BitMan
ich schreib gerade ein Tool das komplexe Kopiervorgänge aufgrund von spziellen Datei-Eigenschaften vornimmt.
Das Tool soll als Forms und Console laufen. Soweit geht es auch. Natürlich hab ich ein LIstView eingebaut das in der Form dann auch eine Ausgabe für jede kopierte Datei erzeugt, aber selbst mit INVOKE will das keine Updates machen.
Das Kopieren nimmt eine Klasse vor die doCopy heisst und mit einer Methode start() ausgestattet ist.
Code:
public string tAusgabe = "";
public void start()
{
//*** noch nicht fertig!
if (pIsConsole) Console.WriteLine("Kopiervorgang gestartet!");
for (int i = 0; i < 10000000; i++)
{
if (pIsConsole) Console.WriteLine(i.ToString());
else
{
ausgabe.Add(i.ToString());
tAusgabe = i.ToString();
while (tAusgabe != "") { }
}
}
isStopped = true;
}
Nun soll die GUI sich bei Inhalt in tAusgabe den String holen und diesen danach löschen.
Im Windows Projekt wird die Methode .start vom Objekt doCopy. mit folgendem Code in einem Thread gestartet
Code:
if (!validate_fields())
return;
String[] ausschluss_liste = new String[listView1.Items.Count];
int i = 0;
foreach (ListViewItem lvi in listView1.Items)
{
ausschluss_liste[i++] = lvi.Text;
}
String[] datei_liste = new String[listView2.Items.Count];
i = 0;
foreach (ListViewItem lvi in listView2.Items)
{
datei_liste[i++] = lvi.Text;
}
doCopy copyProg = new doCopy(false, cbxQuellVerzeichnis.Text, cbxZielVerzeichnis.Text, checkBox1.Checked, checkBox2.Checked, checkBox3.Checked, checkBox4.Checked,
checkBox5.Checked, ausschluss_liste, datei_liste);
listView3.Items.Clear();
Thread thread = new Thread(new ThreadStart(copyProg.start));
thread.IsBackground = true;
thread.Start();
while (!copyProg.isStopped)
{
if (copyProg.tAusgabe != "")
{
DoUpdate(copyProg.tAusgabe);
copyProg.tAusgabe = "";
}
}
Soweit so gut. Nun noch die Methode für das Schreiben in meine ListView .doUpdate
Code:
public delegate void setDoUpdate(string text);
public void DoUpdate(string text)
{
if (listView3.InvokeRequired)
{
setDoUpdate d = new setDoUpdate(DoUpdate);
listView3.Invoke(d, new object[] { text });
return;
}
listView3.Items.Add(text);
}
Läuft alles sauber. Aber bis meine Methode doCopy.start() fertig ist (aktuell nur eine lange Zählschleife) sehe ich nur das der Scrollbalken größer wird aber keine Texte in der Listview. Muss ich etwas anderes Invoken? Oder Liege ich vollkommen falsch?
cu s00n
BitMan