Hi,
ich habe folgendes "Schönheitsproblem". Ich stelle in meinem Programm eine Funktion zum Datendownload bereits (die Dateien kommen von einer Datenbank). Es funktioniert auch alles - nur bleibt die GUI, obwohl ich dem Thread alle benötigten Daten mitgebe und seperat starte, bis zum Ende des Speichervorgangs hängen, d.h. der Benutzer kann in der Zeit nichts machen.
Hier erst einmal der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| if (_lastmail != null) { var parameter = new object[4]; parameter[1] = attatchment.SelectedItems[0].Text.Split(' ')[0]; parameter[2] = Copy.CopyObject(_lastmail); parameter[3] = Copy.CopyObject(_eMail.Email);
var dialog = new SaveFileDialog { FileName = attatchment.SelectedItems[0].Text.Split(' ')[0] };
if (dialog.ShowDialog() == DialogResult.OK) { parameter[0] = dialog.FileName; var pts = new ParameterizedThreadStart(SaveFile); _thread = new Thread(pts); _thread.Start(parameter); } } |
Dies wird nach einem Doppelklich aufgerufen - die Daten holt er sich vom derzeitigen Objekt und der Attatchmentliste (das gerade ausgewählte Element).
Hier der Quellcode vom Thread:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private void SaveFile(object path) { var newpath = (object[])path; string filepath = newpath[0].ToString(); string filename = newpath[1].ToString(); var mail = (Daten.Mail)newpath[2]; string email = newpath[3].ToString();
using (var outputStream = new FileStream(filepath, FileMode.Create, FileAccess.Write)) { var daten = (byte[]) _datenbank.Mysql.MailAction(mail, email, Konstanten.PostAusgang, filename, Konstanten.GetAttatchment); outputStream.Write(daten, 0, daten.Length); } } |
An was kann das liegen bzw. ist das eine Eigenart von C#? Würde mich über Hinweise,Tipps freuen
Vielen Dank im Vorraus,
mfG RBS2002
PS: Falls die Frage auftaucht - das Programm wird, im Ernstfall, erst beendet nachdem der Download abgeschlossen wurde (auch das Fenster kann in der Zeit nicht gewechselt werden, aber das will ich noch ändern) - dazu habe ich ein paar Abfragen eingebaut die ich auf Grund der Platzersparniss nicht hingeschrieben habe
