Stream.CopyToAsync 方法

定義

以非同步的方式從目前資料流讀取所有位元組,並將其寫入另一個資料流中。 這兩個數據流位置會依複製的位元組數目進階。

多載

CopyToAsync(Stream, Int32, CancellationToken)

使用指定的緩衝區大小和取消語彙基元,以非同步的方式從目前資料流讀取位元組,並將其寫入另一個資料流。 這兩個數據流位置都是由複製的位元組數目進階。

CopyToAsync(Stream, CancellationToken)

使用指定的取消權杖,以非同步的方式從目前資料流讀取位元組,並將其寫入另一個資料流。 這兩個數據流位置都是由複製的位元組數目進階。

CopyToAsync(Stream)

以非同步的方式從目前資料流讀取所有位元組,並將其寫入另一個資料流中。 這兩個數據流位置都是由複製的位元組數目進階。

CopyToAsync(Stream, Int32)

使用指定的緩衝區大小,以非同步的方式從目前資料流讀取所有位元組,並將其寫入另一個資料流中。 這兩個數據流位置都是由複製的位元組數目進階。

CopyToAsync(Stream, Int32, CancellationToken)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

使用指定的緩衝區大小和取消語彙基元,以非同步的方式從目前資料流讀取位元組,並將其寫入另一個資料流。 這兩個數據流位置都是由複製的位元組數目進階。

public:
 virtual System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, int bufferSize, System::Threading::CancellationToken cancellationToken);
public virtual System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination, int bufferSize, System.Threading.CancellationToken cancellationToken);
[System.Runtime.InteropServices.ComVisible(false)]
public virtual System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination, int bufferSize, System.Threading.CancellationToken cancellationToken);
abstract member CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
override this.CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
override this.CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Overridable Function CopyToAsync (destination As Stream, bufferSize As Integer, cancellationToken As CancellationToken) As Task

參數

destination
Stream

目前資料流的內容將複製到其中的資料流。

bufferSize
Int32

緩衝區的大小 (以位元組為單位)。 這個值必須大於零。 預設大小為 81920。

cancellationToken
CancellationToken

用來監視是否有取消要求的語彙基元。 預設值是 None

傳回

表示非同步複製作業的工作。

屬性

例外狀況

destinationnull

buffersize 為負值或零。

目前資料流或目的資料流已處置。

目前資料流不支援讀取,或目的資料流不支援寫入。

取消權杖已取消。 此例外狀況會儲存在傳回的工作中。

備註

方法 CopyToAsync 可讓您執行大量資源的 I/O 作業,而不會封鎖主執行緒。 這項效能考量對於 Windows 8.x Store 應用程式或傳統型應用程式而言特別重要,尤其是針對耗時的資料流作業可能會阻礙 UI 執行緒,使應用程式看起來像是停止運作的情況。 非同步方法會與 async Visual Basic 和 C# 中的 和 await 關鍵字搭配使用。

如果作業在完成之前取消,則傳回的工作會 Canceled 包含 屬性的值 Status

複製會從目前資料流程中的目前位置開始。

如需兩個數據流之間複製的範例,請參閱 CopyToAsync(Stream) 多載。

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 CopyTo(Stream, Int32) 擲回的例外狀況。

適用於

CopyToAsync(Stream, CancellationToken)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

使用指定的取消權杖,以非同步的方式從目前資料流讀取位元組,並將其寫入另一個資料流。 這兩個數據流位置都是由複製的位元組數目進階。

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination, System.Threading.CancellationToken cancellationToken);
member this.CopyToAsync : System.IO.Stream * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream, cancellationToken As CancellationToken) As Task

參數

destination
Stream

目前資料流的內容將複製到其中的資料流。

cancellationToken
CancellationToken

用來監視是否有取消要求的語彙基元。 預設值是 None

傳回

表示非同步複製作業的工作。

例外狀況

取消權杖已取消。 此例外狀況會儲存在傳回的工作中。

備註

方法 CopyToAsync 可讓您執行大量資源的 I/O 作業,而不會封鎖主執行緒。 這項效能考量對於 Windows 8.x Store 應用程式或傳統型應用程式而言特別重要,尤其是針對耗時的資料流作業可能會阻礙 UI 執行緒,使應用程式看起來像是停止運作的情況。 非同步方法會與 async Visual Basic 和 C# 中的 和 await 關鍵字搭配使用。

如果作業在完成之前取消,則傳回的工作會 Canceled 包含 屬性的值 Status

複製會從目前資料流程中的目前位置開始。

如需兩個數據流之間複製的範例,請參閱 CopyToAsync(Stream) 多載。

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 CopyTo(Stream) 擲回的例外狀況。

適用於

CopyToAsync(Stream)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

以非同步的方式從目前資料流讀取所有位元組,並將其寫入另一個資料流中。 這兩個數據流位置都是由複製的位元組數目進階。

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination);
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination);
[System.Runtime.InteropServices.ComVisible(false)]
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination);
member this.CopyToAsync : System.IO.Stream -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CopyToAsync : System.IO.Stream -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream) As Task

參數

destination
Stream

目前資料流的內容將複製到其中的資料流。

傳回

表示非同步複製作業的工作。

屬性

例外狀況

destinationnull

目前資料流或目的資料流已處置。

目前資料流不支援讀取,或目的資料流不支援寫入。

範例

下列範例示範如何使用兩 FileStream 個 物件,以非同步方式將檔案從一個目錄複寫到另一個目錄。 FileStream 類別衍生自 Stream 類別。 請注意, Click 控制項的 Button 事件處理常式會以修飾詞標示, async 因為它會呼叫非同步方法

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}
Imports System.IO

Class MainWindow

    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim StartDirectory As String = "c:\Users\exampleuser\start"
        Dim EndDirectory As String = "c:\Users\exampleuser\end"

        For Each filename As String In Directory.EnumerateFiles(StartDirectory)
            Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
                Using DestinationStream As FileStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf("\"c)))
                    Await SourceStream.CopyToAsync(DestinationStream)
                End Using

            End Using
        Next
    End Sub

End Class

備註

方法 CopyToAsync 可讓您執行大量資源的 I/O 作業,而不會封鎖主執行緒。 這項效能考量對於 Windows 8.x Store 應用程式或傳統型應用程式而言特別重要,尤其是針對耗時的資料流作業可能會阻礙 UI 執行緒,使應用程式看起來像是停止運作的情況。 非同步方法會與 async Visual Basic 和 C# 中的 和 await 關鍵字搭配使用。

複製會從目前資料流程中的目前位置開始。

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 CopyTo(Stream) 擲回的例外狀況。

適用於

CopyToAsync(Stream, Int32)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

使用指定的緩衝區大小,以非同步的方式從目前資料流讀取所有位元組,並將其寫入另一個資料流中。 這兩個數據流位置會依複製的位元組數目進階。

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, int bufferSize);
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination, int bufferSize);
[System.Runtime.InteropServices.ComVisible(false)]
public System.Threading.Tasks.Task CopyToAsync (System.IO.Stream destination, int bufferSize);
member this.CopyToAsync : System.IO.Stream * int -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CopyToAsync : System.IO.Stream * int -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream, bufferSize As Integer) As Task

參數

destination
Stream

目前資料流的內容將複製到其中的資料流。

bufferSize
Int32

緩衝區的大小 (以位元組為單位)。 這個值必須大於零。 預設大小為 81920。

傳回

表示非同步複製作業的工作。

屬性

例外狀況

destinationnull

buffersize 為負值或零。

目前資料流或目的資料流已處置。

目前資料流不支援讀取,或目的資料流不支援寫入。

備註

方法 CopyToAsync 可讓您執行大量資源的 I/O 作業,而不會封鎖主執行緒。 這項效能考量對於 Windows 8.x Store 應用程式或傳統型應用程式而言特別重要,尤其是針對耗時的資料流作業可能會阻礙 UI 執行緒,使應用程式看起來像是停止運作的情況。 非同步方法會與 async Visual Basic 和 C# 中的 和 await 關鍵字搭配使用。

複製會從目前資料流程中的目前位置開始。

如需兩個數據流之間複製的範例,請參閱 CopyToAsync(Stream) 多載。

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用狀況例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用狀況例外狀況,例如 ArgumentException ,仍會同步擲回。 如需預存的例外狀況,請參閱 所 CopyTo(Stream, Int32) 擲回的例外狀況。

適用於