Vergleich schlägt fehl trotz Gleichheit

23/03/2008 - 18:03 von Achim Bohmann | Report spam
Hallo!

habe hier eine Methode, die Daten kopieren soll. das tut sie auch artig,
wenn man davon absieht, dass sie niemals endet.
Habe schon alles mögliche getestet und wàre um einen Tipp froh...
Die Schleife "while( !finish )" in der Mitte des codes endet niemals,
weil der Vergleich "finish = read.Equals( gesamt );" nie true wird. habe
da schon alles ausprobiert, was mir eingefallen ist. Weder " == " noch
equals stellen fest, dass read und gesamt gleich sind, obwohl der
Debugger eindeutig sagt, dass sie es sind.
Auch die Datei ist vollstàndig kopiert und in Ordnung, aber die Schleife
"hàngt".

Weiß jemand warum???



private void StartCopy() {
IContent icSource = (IContent)Activator.CreateInstance(sourceType);
icSource.Init();
icSource.StateData = sourceState;

IContent icDest = (IContent)Activator.CreateInstance( destType );
icDest.Init();
icDest.StateData = destState;

long gesamt = -1;
byte[] buffer = new byte[1048576];
foreach( Entry E in itemsToCopy ) {
sourceStream = icSource.GetStream( E, out gesamt );
destStream = icDest.SetStream( E );
BinaryReader br = new BinaryReader( sourceStream );
BinaryWriter bw = new BinaryWriter( destStream );
long read = -1;
int chunk = -1;
bool finish = false;
while( !finish ) {
chunk = br.Read( buffer, 0, buffer.Length );
bw.Write( buffer, 0, chunk );
read += chunk;
Application.DoEvents();
while( pause ) {
System.Threading.Thread.Sleep( 200 );
Application.DoEvents();
}
finish = read.Equals( gesamt );
}
br.Close();
bw.Close();
sourceStream.Close();
destStream.Close();
}
icSource.Finish();
icDest.Finish();
icSource = null;
icDest = null;
}
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
23/03/2008 - 19:10 | Warnen spam
"Achim Bohmann" schrieb:
habe hier eine Methode, die Daten kopieren soll. das tut sie auch artig,
wenn man davon absieht, dass sie niemals endet.
Habe schon alles mögliche getestet und wàre um einen Tipp froh...
Die Schleife "while( !finish )" in der Mitte des codes endet niemals, weil
der Vergleich "finish = read.Equals( gesamt );" nie true wird. habe da
schon alles ausprobiert, was mir eingefallen ist. Weder " == " noch equals
stellen fest, dass read und gesamt gleich sind, obwohl der Debugger
eindeutig sagt, dass sie es sind.
Auch die Datei ist vollstàndig kopiert und in Ordnung, aber die Schleife
"hàngt".

Weiß jemand warum???



Kann ich nicht ganz (in Gedanken) nachvollziehen. 'finish = (read ==
gesamt);' sollte funktionieren.

while( !finish ) {
chunk = br.Read( buffer, 0, buffer.Length );
bw.Write( buffer, 0, chunk );
read += chunk;
Application.DoEvents();
while( pause ) {
System.Threading.Thread.Sleep( 200 );
Application.DoEvents();
}



Was bezweckst Du mit dem Wartecode?

icSource = null;
icDest = null;



... kannst Du sparen, da die Verweise ohnehin bei Verlassen der Methode
ungültig werden.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen