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



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


Глава.25 .Взаимодействие.с.компонентами.WinRT
private void OpCompleted(IAsyncOperation asyncOp, AsyncStatus status) 

switch (status) { 
case AsyncStatus.Completed: // Обработка результата
StorageFile file = asyncOp.GetResults(); /* Завершено... */ break; 
case AsyncStatus.Canceled: // Обработка отмены
/* Canceled... */ break; 
case AsyncStatus.Error: // Обработка исключения
Exception exception = asyncOp.ErrorCode; /* Ошибка... */ break; 

asyncOp.Close(); 
}
Метод 
WinRTAsyncIntro
вызывает метод WinRT 
GetFileAsync
для поиска файла 
в медиатеке пользователя. Все функции WinRT API, выполняющие асинхронные 
операции, имеют суффикс 
Async
и возвращают объект, тип которого реализует ин-
терфейс WinRT 
IAsyncXxx
; в данном случае интерфейс 
IAsyncOperation

где 
TResult
— тип WinRT 
StorageFile
. Этот объект, ссылку на который я поместил 
в переменную 
asyncOp
, представляет незавершенную асинхронную операцию. 
Ваш код должен каким-то образом получить уведомление о завершении операции. 
Для этого необходимо реализовать метод обратного вызова (
OpCompleted
в моем 
примере), создать для него делегата и задать делегата свойству 
Completed
объекта 
asyncOp
. Теперь при завершении операции метод обратного вызова будет активи-
зирован каким-либо потоком (необязательно потоком графического интерфейса). 
Если операция была завершена перед назначением делегата свойству 
OnCompleted

система вызовет метод обратного вызова как можно быстрее. Другими словами, 
здесь возникает ситуация гонки, но объект, реализующий интерфейс 
IAsyncXxx

разрешит ее за вас, обеспечивая правильность работы кода.
Как указано в конце метода 
WinRTAsyncIntro
, для отмены незаверенной операции 
также можно вызвать метод 
Cancel
, реализуемый всеми интерфейсами 
IAsyncXxx

Все асинхронные операции завершаются по одной из трех причин: успешного вы-
полнения операции до конца, явной отмены или ошибки при выполнении операции. 
При завершении операции по одной из этих причин система вызывает метод об-
ратного вызова и передает ему ссылку на объект, возвращенный исходным методом 
XxxAsync
, и 
AsyncStatus
. Мой метод 
OnCompleted
проверяет параметр 
status
и обрабатывает либо результат при успешном завершении, либо явную отмену, 
либо ошибку
1
. Также обратите внимание на то, что после обработки завершения 
операции для объекта интерфейса 
IAsyncXxx
необходимо вызвать метод 
Close
.
1
Интерфейс IAsyncInfo предоставляет свойство Status, которое содержит значение, пере-
данное в параметре status метода обратного вызова. Так как параметр передается по значению, 
обращение к параметру (вместо запроса свойства Status) улучшит производительность при-
ложения, потому что обращение к свойству приводит к вызову функции WinRT API через 
RCW.


707
Проекции.уровня. NET.Framework
На рис. 25.2 изображены различные интерфейсы WinRT 
IAsyncXxx
. Все четы-
ре главных интерфейса происходят от интерфейса 
IAsyncInfo
. Два интерфейса 
IAsyncAction
предоставляют возможность узнать о завершении операции, но их 
операции завершаются без возвращаемого значения (их методы 
GetResults
воз-
вращают 
void
). Два интерфейса 
IAsyncOperation
позволяют не только узнать о за-
вершении операции, но и получить возвращаемое значение (их методы 
GetResults
возвращают обобщенный тип 
TResult
).
Два интерфейса 
IAsyncXxxWithProgress
позволяют коду получать перио-
дические оповещения о ходе выполнения асинхронной операции. Большинство 
асинхронных операций не поддерживает оповещения, но у некоторых видов опе-
раций (как, например, у фоновой загрузки и отправки данных) такая возможность 
предусмотрена. Для получения оповещений следует определить в коде еще один 
метод обратного вызова, создать для него делегата и назначить его свойству 
Progress
объекта 
IAsyncXxxWithProgress
. При обращении к методу обратного вызова пере-
дается аргумент, тип которого соответствует обобщенному типу 
TProgress
.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   520   521   522   523   524   525   526   527   ...   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