ObjectDisposedException bei EndOfStream-Abfrage

18/10/2007 - 13:48 von RalfWeb1 | Report spam
Hallo,

ich habe ein Problem mit einer Methode die mehrere Dateien
herunterlàdt.
Möglicherweise hàngt es damit zusammen, dass der Download jetzt in
einem Thread làuft. Wenn ich die Methode aufrufe aus dem Hauptthread
ohne einen separaten zu starten funktioniert es.

Den Thread erstelle ich so:

[code]
Thread downThread;
downThread = new Thread(new ThreadStart(doDownTask));
downThread.Start();
[/code]

[code]
private void doDownTask()
{
int sec, min, hour;
Thread.Sleep(TimeSpan.FromSeconds(10));
do
{
DateTime theTime = DateTime.Now;
if ((theTime.DayOfWeek != DayOfWeek.Sunday) && (!
downProg)&&(!uploadProg))
{
sec = theTime.Second;
min = theTime.Minute;
hour = theTime.Hour;
if ((hour > 1) && (hour < 19))
{
downloadOrders = true;
downUri = tbDownUri.Text;
downPath = tbDownPath.Text;
ftpUser = tbFtpUser.Text;
ftpPass = tbFtpPass.Text;
startAutoDownload();
downProg = true;
}
else
{
if (hour < 8)
Thread.Sleep(TimeSpan.FromMinutes((8 - hour) * 60 - min));
if (hour > 18)
Thread.Sleep(TimeSpan.FromMinutes(8 * 60 + (24 - hour) * 60 - min));
}
}
if (downloadDone)
{
theTime = DateTime.Now;
min = theTime.Minute;
downProg = false;
downloadDone = false;
downloadOrders = false;
sumFileLength = 0;
if(min<30)Thread.Sleep(TimeSpan.FromMinutes(30-
min));
else if (min > 30)
Thread.Sleep(TimeSpan.FromMinutes(60 - min));
}
} while (doAuto);
this.Close();
}
[/code]

Die Kern der Download-Methode sieht so aus:
[code]<snip>
for (int i = lbDirList.Items.Count - 1; i >= 0; i--)
{
newOrders = true;
req (FtpWebRequest)FtpWebRequest.Create(target +
lbDirList.Items[i].ToString());
req.Method WebRequestMethods.Ftp.DownloadFile;
req.Credentials = new
NetworkCredential(ftpUser, ftpPass);
wr = req.GetResponse();
str = wr.GetResponseStream();
sr = new StreamReader(str);
sw = new StreamWriter(downPath + "\\" +
lbDirList.Items[i].ToString());
while (!sr.EndOfStream)
{
sw.Write(sr.ReadLine());
}
sw.Close();
str.Close();

req (FtpWebRequest)FtpWebRequest.Create(target +
lbDirList.Items[i].ToString());
req.Method = WebRequestMethods.Ftp.DeleteFile;
req.Credentials = new
NetworkCredential(ftpUser, ftpPass);
wr = req.GetResponse();
ordCnt++;
if (i % step == 0) downProgBar.Invoke(new
MethodInvoker(downProgBarStep));
}
[/code]

Bei der Abfrage nach "sr.EndOfStream" im Kopf der While-Schleife
bekomme ich die "ObjectDisposedException" nach ein paar eingelesenen
Zeilen.
Den selben Code habe ich jedoch auch in der 'manuellen' Methode stehen
und dort funktioniert der Download.

Wie kann das mit den Threads zusammenhàngen, dass der NetworkStream
plötzlich verworfen wird?

Danke schon mal für die Hilfe!

MfG, Ralf...
 

Lesen sie die antworten

#1 RalfWeb1
18/10/2007 - 23:47 | Warnen spam
Ich habe den Download jetzt mit "WebClient" realisiert.
Damit funktioniert es auch innerhalb des Threads...

Ähnliche fragen