Pelajari lebih lanjut tentang: Cara: Mengonversi antara aliran .NET Framework dan Windows Runtime (hanya Windows)
.NET Framework untuk aplikasi UWP adalah subset dari .NET Framework lengkap. Karena keamanan dan persyaratan lain untuk aplikasi UWP, Anda tidak dapat menggunakan set lengkap API .NET Framework untuk membuka dan membaca file. Untuk informasi selengkapnya, lihat .NET untuk gambaran umum aplikasi UWP. Namun, Anda mungkin ingin menggunakan API .NET Framework untuk operasi manipulasi aliran lainnya. Untuk memanipulasi aliran ini, Anda dapat mengonversi antara jenis aliran .NET Framework, seperti MemoryStream atau FileStream, dan aliran runtime bahasa umum Windows, seperti IInputStream, IOutputStream, atau IRandomAccessStream.
Kelas System.IO.WindowsRuntimeStreamExtensions berisi metode yang memudahkan konversi ini. Namun, perbedaan yang mendasari antara aliran .NET Framework dan Windows Runtime memengaruhi hasil penggunaan metode ini, seperti yang dijelaskan di bagian berikut:
Mengonversi dari runtime bahasa umum Windows menjadi aliran .NET Framework
Untuk mengonversi dari aliran Windows Runtime menjadi aliran .NET Framework, gunakan salah satu metode berikutSystem.IO.WindowsRuntimeStreamExtensions:
WindowsRuntimeStreamExtensions.AsStreammengonversi aliran akses acak di Windows Runtime ke aliran terkelola di .NET untuk aplikasi UWP.
WindowsRuntimeStreamExtensions.AsStreamForWritemengonversi aliran output di Windows Runtime ke aliran terkelola di .NET untuk aplikasi UWP.
WindowsRuntimeStreamExtensions.AsStreamForReadmengonversi aliran output di Windows Runtime ke aliran terkelola di .NET untuk aplikasi UWP.
Windows Runtime menawarkan jenis streaming yang hanya mendukung membaca, menulis saja, atau membaca dan menulis. Kemampuan ini dipertahankan saat Anda mengonversi aliran runtime bahasa umum Windows ke aliran .NET Framework. Selain itu, jika Anda mengonversi aliran Windows Runtime ke aliran .NET Framework dan kembali, Anda mendapatkan instans Windows Runtime asli kembali.
Praktik terbaik adalah menggunakan metode konversi yang cocok dengan kemampuan aliran Windows Runtime yang ingin Anda konversi. Namun, karena IRandomAccessStream dapat dibaca dan ditulis (mengimplementasikan IOutputStream dan IInputStream), metode konversi mempertahankan kemampuan aliran asli. Misalnya, menggunakan WindowsRuntimeStreamExtensions.AsStreamForRead untuk mengonversi IRandomAccessStream tidak membatasi aliran .NET Framework yang dikonversi agar dapat dibaca. Ini juga bisa ditulis.
Contoh: Mengonversi akses acak Windows Runtime ke aliran .NET Framework
Untuk mengonversi dari aliran akses acak Windows Runtime ke aliran .NET Framework, gunakan metode .WindowsRuntimeStreamExtensions.AsStream
Contoh kode berikut meminta Anda untuk memilih file, membukanya dengan Windows Runtime API, lalu mengonversinya menjadi aliran .NET Framework. Ini membaca aliran dan mengeluarkannya ke blok teks. Anda biasanya akan memanipulasi aliran dengan API .NET Framework sebelum menghasilkan hasilnya.
// Create a file picker.
FileOpenPicker picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
picker.ViewMode = PickerViewMode.List;
picker.FileTypeFilter.Add(".txt");
// Show picker, enabling user to pick one file.
StorageFile result = await picker.PickSingleFileAsync();
if (result != null)
{
try
{
// Retrieve the stream. This method returns a IRandomAccessStreamWithContentType.
var stream = await result.OpenReadAsync();
// Convert the stream to a .NET stream using AsStream, pass to a
// StreamReader and read the stream.
using (StreamReader sr = new StreamReader(stream.AsStream()))
{
TextBlock1.Text = sr.ReadToEnd();
}
}
catch (Exception ex)
{
// ...
}
}
Mengonversi dari runtime bahasa umum Windows menjadi aliran .NET Framework
Untuk mengonversi dari aliran Windows Runtime menjadi aliran .NET Framework, gunakan salah satu metode berikutSystem.IO.WindowsRuntimeStreamExtensions:
WindowsRuntimeStreamExtensions.AsInputStreammengonversi aliran terkelola di .NET untuk aplikasi UWP ke aliran input Windows Runtime.
WindowsRuntimeStreamExtensions.AsOutputStreammengonversi aliran terkelola di .NET untuk aplikasi UWP ke aliran terkelola di .Windows Runtime.
WindowsRuntimeStreamExtensions.AsRandomAccessStreammengonversi aliran terkelola di .NET untuk aplikasi UWP ke aliran akses acak yang dapat digunakan Windows Runtime untuk membaca atau menulis.
Saat Anda mengonversi aliran .NET Framework ke aliran Windows Runtime, kemampuan aliran yang dikonversi bergantung pada aliran asli. Misalnya, jika aliran asli mendukung pembacaan dan penulisan, dan Anda memanggil WindowsRuntimeStreamExtensions.AsInputStream untuk mengonversi aliran, jenis yang dikembalikan adalah IRandomAccessStream
. IRandomAccessStream
mengimplementasikan IInputStream
dan IOutputStream
, dan mendukung membaca dan menulis.
.NET Framework aliran tidak mendukung kloning, bahkan setelah konversi. Jika Anda mengonversi aliran .NET Framework ke aliran Windows Runtime dan memanggil GetInputStreamAt atau GetOutputStreamAt, yang memanggil CloneStream, atau jika Anda memanggil CloneStream secara langsung, pengecualian terjadi.
Contoh: Mengonversi akses acak Windows Runtime ke aliran .NET Framework
Untuk mengonversi dari aliran .NET Framework ke aliran akses acak Windows Runtime, gunakan metode , seperti yang AsRandomAccessStream ditunjukkan dalam contoh berikut:
Penting
Pastikan aliran .NET Framework yang Anda gunakan mendukung pencarian, atau salin ke aliran yang melakukannya. Anda dapat menggunakan Stream.CanSeek properti untuk menentukan ini.
// Create an HttpClient and access an image as a stream.
var client = new HttpClient();
Stream stream = await client.GetStreamAsync("https://learn.microsoft.com/en-us/dotnet/images/hub/featured-1.png");
// Create a .NET memory stream.
var memStream = new MemoryStream();
// Convert the stream to the memory stream, because a memory stream supports seeking.
await stream.CopyToAsync(memStream);
// Set the start position.
memStream.Position = 0;
// Create a new bitmap image.
var bitmap = new BitmapImage();
// Set the bitmap source to the stream, which is converted to a IRandomAccessStream.
bitmap.SetSource(memStream.AsRandomAccessStream());
// Set the image control source to the bitmap.
Image1.Source = bitmap;