UssdSession.SendMessageAndGetReplyAsync(UssdMessage) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Отправляет сообщение в сеанс USSD и возвращает обработчик для асинхронного получения ответа.
Примечание
Эта функция доступна только для приложений мобильных операторов и приложений UWP с привилегированным доступом со стороны операторов мобильной сети.
Если вы хотите использовать этот API и опубликовать приложение в Microsoft Store, вам потребуется специальное утверждение. Дополнительные сведения см. в разделе Ограниченные возможности статьи Объявления возможностей приложения .
public:
virtual IAsyncOperation<UssdReply ^> ^ SendMessageAndGetReplyAsync(UssdMessage ^ message) = SendMessageAndGetReplyAsync;
IAsyncOperation<UssdReply> SendMessageAndGetReplyAsync(UssdMessage const& message);
public IAsyncOperation<UssdReply> SendMessageAndGetReplyAsync(UssdMessage message);
function sendMessageAndGetReplyAsync(message)
Public Function SendMessageAndGetReplyAsync (message As UssdMessage) As IAsyncOperation(Of UssdReply)
Параметры
- message
- UssdMessage
Сообщение для отправки в сеанс USSD.
Возвращаемое значение
Асинхронный обработчик для получения ответа USSD на отправленное сообщение.
Требования к Windows
Возможности приложения |
cellularDeviceControl
cellularDeviceIdentity
|
Комментарии
Отправляемое сообщение USSD может быть либо запросом, либо ответом. Операция является асинхронной и выполняет один обратный вызов с помощью интерфейса IAsyncOperation(UssdReply) по завершении. Отменить асинхронную операцию можно с помощью интерфейса IAsyncOperation(UssdReply).
Когда приложение, использующее проекцию C++ SendMessageAndGetReplyAsync, выпускает последнюю ссылку на объект UssdSession из этого обратного вызова, SendMessageAndGetReplyAsync может зависнуть. Поэтому приложения должны гарантировать, что обратный вызов не будет освобожден из SendMessageAndGetReplyAsync. Одним из способов этого является создание другой асинхронной операции (например, таймера) из обратного вызова, обратный вызов завершения которого используется для освобождения объекта сеанса путем передачи ему ссылки на объект сеанса.
#include <winrt/Windows.System.Threading.h>
using namespace winrt;
using namespace Windows::System::Threading;
...
auto timerDelegate = [ussdSession](ThreadPoolTimer const& timer) {};
Windows::Foundation::TimeSpan delay{ std::chrono::seconds(1) };
ThreadPoolTimer timer{ ThreadPoolTimer::CreateTimer(TimerElapsedHandler(timerDelegate), delay) };
auto timerDelegate = [ussdSession](Windows::System::Threading::ThreadPoolTimer^ timer) {};
Windows::Foundation::TimeSpan delay;
delay.Duration = 1; // non-zero value
Windows::System::Threading::ThreadPoolTimer^ timer =
Windows::System::Threading::ThreadPoolTimer::CreateTimer(ref new
Windows::System::Threading::TimerElapsedHandler(timerDelegate), delay);