次の方法で共有


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) インターフェイスを使用して 1 つのコールバックを発行します。 IAsyncOperation(UssdReply) インターフェイスを使用して非同期操作を取り消すことができます。

SendMessageAndGetReplyAsync の C++ プロジェクションを使用するアプリケーションが、そのコールバック内から UssdSession オブジェクトへの最後の参照を解放すると、SendMessageAndGetReplyAsync がハングする可能性があります。 そのため、アプリケーションでは、SendMessageAndGetReplyAsync 内からコールバックが解放されていないことを確認する必要があります。 これを行う方法の 1 つは、セッション オブジェクトへの参照を渡すことによって、完了コールバックを使用してセッション オブジェクトを解放するコールバック内から別の非同期操作 (タイマーなど) を作成することです。

#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);

適用対象