2016-10-26 3 views
0

私のアプリケーションに問題があります。 FTPサーバーに画像を送信しようとしています。私はサーバーに接続し、認証し、そして他の人に接続することができます。しかし、私がファイルを送信しようとすると、ファイルが大きい(通常40-50kbより大きい)場合、私はSystem.ObjectDisposedExceptionを取得します。System.ObjectDisposedException UWP

これは私が送信するために使用したコードです:

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(); 
       } 
      } 
     } 

私はGetResultingBufferは、タスクが、UploadFileAsnc内部サイクルではなかった編集する前に、それを編集してみました。どのように私はバッファを処分することを防ぐことができますか?別の解決策がありますか?ありがとう!

+0

コードのどの行でエラーを手に入れたでそれを解決しましたか? –

+0

While in while(true).. Thinkはメモリ不足エラーです。私は下の私の答えでそれを解決した –

答えて

0

は、私がこのよう

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(); 
関連する問題