2016-10-26 2 views
0

Ich habe ein Problem in meiner Anwendung. Ich versuche ein Bild in den FTP-Server zu senden. Ich kann mich mit dem Server verbinden, authentifizieren und andere. Aber wenn ich versuche, Datei zu senden, wenn die Datei groß ist (normalerweise größer als 40-50kb), habe ich System.ObjectDisposedException.System.ObjectDisposedException UWP

Dies ist der Code, den ich senden verwenden:

public async Task <byte[]> GetResultingBuffer(IRandomAccessStreamWithContentType readStream, IBuffer buffer) 
     { 
      var resultingBuffer = new byte[0]; 
      while (true) 
      { 
       IBuffer readBuffer = await readStream.ReadAsync(buffer, 1024, InputStreamOptions.Partial); 

       if (readBuffer.Length == 0) break; 

       resultingBuffer = resultingBuffer.Concat(readBuffer.ToArray()).ToArray(); 
      } 
      return resultingBuffer; 
     } 

     public async Task UploadFileAsync(StorageFile file, string destination) 
     { 
      using (var stream = await OpenWriteAsync(destination)) 
      { 
       // 
       // A more efficient way, maybe a DataReader can be used here 
       using (var readStream = await file.OpenReadAsync()) 
       { 
        var buffer = new byte[1024].AsBuffer(); 
        var resultingBuffer = new byte[0]; 
        resultingBuffer = await GetResultingBuffer(readStream, buffer); 


        await stream.WriteAsync(resultingBuffer.AsBuffer()); 
        await stream.FlushAsync(); 
       } 
      } 
     } 

ich es zu bearbeiten versucht, bevor GetResultingBuffer Bearbeitung keine Aufgabe, sondern ein Zyklus innerhalb UploadFileAsnc. Wie kann ich verhindern, den Puffer zu entsorgen? Gibt es eine andere Lösung? Vielen Dank!

+0

In welcher Zeile von Codes haben Sie den Fehler? –

+0

Im Zyklus in While (true) .. Think ist ein Speicherexzeptionsfehler. Ich habe es in meiner Antwort unten gelöst –

Antwort

0

Ich löste es auf diese Weise

using (var readStream = await file.OpenReadAsync()) 
       { 
        var buffer = new byte[3000000].AsBuffer(); 
        //var resultingBuffer = new byte[10000000]; 
        Debug.Write("-------"); 
        //while (true) 
        //{ 
         IBuffer readBuffer = await readStream.ReadAsync(buffer, 3000000, InputStreamOptions.Partial); 

        //if (readBuffer.Length == 0) break; 

        //resultingBuffer = resultingBuffer.Concat(readBuffer.ToArray()).ToArray(); 
        //} 

        // await stream.WriteAsync(resultingBuffer.AsBuffer()); 
        var resultingBuffer = new byte[readBuffer.Length]; 
        readBuffer.CopyTo(resultingBuffer); 

        await stream.WriteAsync(resultingBuffer.AsBuffer()); 
       } 

       Debug.Write("-------"); 
       await stream.FlushAsync();