Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet526/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   522   523   524   525   526   527   528   529   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.25 .Взаимодействие.с.компонентами.WinRT
самого сложного метода 
AsTask
. Конечно, более простые перегруженные версии 
устроены проще.
public 
static Task AsTask
this IAsyncOperationWithProgress asyncOp, 
CancellationToken ct = default(CancellationToken), 
IProgress progress = null) { 
// При отмене CancellationTokenSource отменить асинхронную операцию
ct.Register(() => asyncOp.Cancel()); 
// Когда асинхронная операция оповещает о прогрессе,
// оповещение передается методу обратного вызова
asyncOp.Progress = (asyncInfo, p) => progress.Report(p); 
// Объект TaskCompletionSource наблюдает за завершением
// асинхронной операции
var tcs = new TaskCompletionSource(); 
// При завершении асинхронной операции оповестить TaskCompletionSource.
// Когда это происходит, управление возвращается коду,
// ожидающему завершения TaskCompletionSource.
asyncOp.Completed = (asyncOp2, asyncStatus) => { 
switch (asyncStatus) { 
case AsyncStatus.Completed: tcs.SetResult(asyncOp2.GetResults()); break; 
case AsyncStatus.Canceled: tcs.SetCanceled(); break; 
case AsyncStatus.Error: tcs.SetException(asyncOp2.ErrorCode); break; 

}; 
return tcs.Task; 
}
Взаимодействия между потоками WinRT и потоками .NET
Многие классы .NET Framework работают с типами, производными от 
System.
IO.Stream
— как, например, классы сериализации и LINQ. Чтобы использовать объ-
ект WinRT, реализующий интерфейсы WinRT 
IStorageFile
или 
IStorageFolder

с классом .NET Framework, которому необходим тип, производный от Stream, 
следует задействовать методы расширения, определенные в классе 
System.IO.Wi
ndowsRuntimeStorageExtensions
.
namespace System.IO { // Определяется в System.Runtime.WindowsRuntime.dll 
public static class WindowsRuntimeStorageExtensions { 
public static Task OpenStreamForReadAsync(this IStorageFile file); 
public static Task OpenStreamForWriteAsync(this IStorageFile file); 
public static Task OpenStreamForReadAsync(this 
IStorageFolder rootDirectory,
String relativePath); 
public static Task OpenStreamForWriteAsync(this 


711
Проекции.уровня. NET.Framework
IStorageFolder rootDirectory,
String relativePath, CreationCollisionOption creationCollisionOption); 

}
В следующем примере один из методов расширения используется для открытия 
объекта WinRT 
StorageFile
и чтения его содержимого в объект .NET Framework 
XElement
.
async Task FromStorageFileToXElement(StorageFile file) { 
using (Stream stream = await file.OpenStreamForReadAsync()) { 
return XElement.Load(stream); 

}
Наконец, класс 
System.IO.WindowsRuntimeStreamExtensions
предоставляет 
методы расширения, «преобразующие» потоковые интерфейсы WinRT (такие, как 
IRandomAccessStream

IInputStream
или 
IOutputStream
) в тип .NET Framework 
Stream
, и наоборот.
namespace 
System.IO { // Определяется в System.Runtime.WindowsRuntime.dll 
public static class WindowsRuntimeStreamExtensions { 
public static Stream AsStream(this IRandomAccessStream winRTStream); 
public static Stream AsStream(this IRandomAccessStream winRTStream, 
Int32 bufferSize);
public static Stream AsStreamForRead(this IInputStream winRTStream); 
public static Stream AsStreamForRead(this IInputStream winRTStream, 
Int32 bufferSize);
public static Stream AsStreamForWrite(this IOutputStream winRTStream); 
public static Stream AsStreamForWrite(this IOutputStream winRTStream, 
Int32 bufferSize); 
public static IInputStream AsInputStream (this Stream clrStream); 
public static IOutputStream AsOutputStream(this Stream clrStream); 

}
В следующем примере один из методов расширения используется для «преоб-
разования» объекта WinRT 
IInputStream
в объект .NET Framework 
Stream
.
XElement FromWinRTStreamToXElement(IInputStream winRTStream) { 
Stream netStream = winRTStream.AsStreamForRead(); 
return XElement.Load(netStream); 
}
Обратите внимание: методы «преобразования», предоставляемые .NET 
Framework, не ограничиваются простым внутренним преобразованием типа. Ме-
тоды, адаптирующие потоки WinRT в потоки .NET Framework, неявно создают 
буфер для потока WinRT в управляемой куче. В результате большинство операций 
осуществляет запись в буфер и не нуждается в пересечении границы взаимодей-
ствия, что способствует повышению производительности — это особенно важно 
в ситуациях с многочисленными мелкими операциями ввода-вывода (например, 
при разборе документа XML).


712
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   522   523   524   525   526   527   528   529   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish