簡體   English   中英

System.ObjectDisposedException UWP

[英]System.ObjectDisposedException UWP

我的應用程序有問題。 我正在嘗試將圖像發送到FTP服務器。 我能夠與服務器連接,進行身份驗證等。 但是當我嘗試發送文件時,如果文件很大(通常大於40-50kb),則會收到System.ObjectDisposedException。

這是我用來發送的代碼:

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內部的一個循環。 我如何防止處置緩沖區? 還有其他解決方案嗎? 謝謝!

我以這種方式解決了

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM