AsyncBase クラス
Windows ランタイムの非同期ステート マシンを実装します。
構文
template <
typename TComplete,
typename TProgress = Details::Nil,
AsyncResultType resultType = SingleResult
>
class AsyncBase : public AsyncBase<TComplete, Details::Nil, resultType>;
template <typename TComplete, AsyncResultType resultType>
class AsyncBase<TComplete, Details::Nil, resultType> :
public Microsoft::WRL::Implements<IAsyncInfo>;
パラメーター
TComplete
非同期操作の完了時に呼び出されるイベント ハンドラー。
TProgress
実行中の非同期操作が操作の現在の進行状況を報告するときに呼び出されるイベント ハンドラー。
resultType
AsyncResultType 列挙型の値の 1 つ。 既定では、 SingleResult
。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
AsyncBase::AsyncBase | AsyncBase クラスのインスタンスを初期化します。 |
パブリック メソッド
名前 | 説明 |
---|---|
AsyncBase::Cancel | 非同期操作をキャンセルします。 |
AsyncBase::Close | 非同期操作を閉じます。 |
AsyncBase::FireCompletion | 完了イベント ハンドラーを呼び出します。または、内部の進行状況デリゲートをリセットします。 |
AsyncBase::FireProgress | 現在の進行状況イベント ハンドラーを呼び出します。 |
AsyncBase::get_ErrorCode | 現在の非同期操作のエラー コードを取得します。 |
AsyncBase::get_Id | 非同期操作のハンドルを取得します。 |
AsyncBase::get_Status | 非同期操作の状態を示す値を取得します。 |
AsyncBase::GetOnComplete | 現在の完了イベント ハンドラーのアドレスを、指定した変数にコピーします。 |
AsyncBase::GetOnProgress | 現在の進行状況イベント ハンドラーのアドレスを、指定した変数にコピーします。 |
AsyncBase::put_Id | 非同期操作のハンドルを設定します。 |
AsyncBase::PutOnComplete | 完了イベント ハンドラーのアドレスを指定した値に設定します。 |
AsyncBase::PutOnProgress | 進行状況イベント ハンドラーのアドレスを指定した値に設定します。 |
保護メソッド
名前 | 説明 |
---|---|
AsyncBase::CheckValidStateForDelegateCall | 現在の非同期状態でデリゲート プロパティを変更できるかどうかをテストします。 |
AsyncBase::CheckValidStateForResultsCall | 現在の非同期状態で非同期操作の結果を収集できるかどうかをテストします。 |
AsyncBase::ContinueAsyncOperation | 非同期操作の処理を続行するか、停止するかを決定します。 |
AsyncBase::CurrentStatus | 現在の非同期操作の状態を取得します。 |
AsyncBase::ErrorCode | 現在の非同期操作のエラー コードを取得します。 |
AsyncBase::OnCancel | 派生クラスでオーバーライドされるとき、非同期操作をキャンセルします。 |
AsyncBase::OnClose | 派生クラスでオーバーライドされるとき、非同期操作を閉じます。 |
AsyncBase::OnStart | 派生クラスでオーバーライドされるとき、非同期操作を開始します。 |
AsyncBase::Start | 非同期操作を開始します。 |
AsyncBase::TryTransitionToCompleted | 現在の非同期操作が完了したかどうかを示します。 |
AsyncBase::TryTransitionToError | 指定したエラー コードが内部エラー状態を変更できるかどうかを示します。 |
継承階層
AsyncBase
AsyncBase
要件
ヘッダー: async.h
名前空間: Microsoft::WRL
AsyncBase::AsyncBase
AsyncBase
クラスのインスタンスを初期化します。
AsyncBase();
AsyncBase::Cancel
非同期操作をキャンセルします。
STDMETHOD(
Cancel
)(void);
戻り値
既定では、常に S_OK を返します。
解説
Cancel()
は IAsyncInfo::Cancel
の既定の実装であり、実際の処理は行われません。 非同期操作を実際にキャンセルするには、純粋仮想メソッド OnCancel()
をオーバーライドします。
AsyncBase::CheckValidStateForDelegateCall
現在の非同期状態でデリゲート プロパティを変更できるかどうかをテストします。
inline HRESULT CheckValidStateForDelegateCall();
戻り値
デリゲート プロパティを変更できる場合は S_OK、それ以外の場合は E_ILLEGAL_METHOD_CALL。
AsyncBase::CheckValidStateForResultsCall
現在の非同期状態で非同期操作の結果を収集できるかどうかをテストします。
inline HRESULT CheckValidStateForResultsCall();
戻り値
結果を収集できる場合は S_OK、それ以外の場合は E_ILLEGAL_METHOD_CALLE_ILLEGAL_METHOD_CALL。
AsyncBase::Close
非同期操作を閉じます。
STDMETHOD(
Close
)(void) override;
戻り値
操作が閉じられる場合、または既に閉じている場合は S_OK、それ以外の場合は E_ILLEGAL_STATE_CHANGE。
解説
Close()
は IAsyncInfo::Close
の既定の実装であり、実際の処理は行われません。 非同期操作を実際に閉じるには、純粋仮想メソッド OnClose()
をオーバーライドします。
AsyncBase::ContinueAsyncOperation
非同期操作の処理を続行するか、停止するかを決定します。
inline bool ContinueAsyncOperation();
戻り値
非同期操作の現在の状態が "開始済み" の場合は true
。これは操作を続行するという意味です。 それ以外の場合 (false
) は、操作を停止するという意味です。
AsyncBase::CurrentStatus
現在の非同期操作の状態を取得します。
inline void CurrentStatus(
Details::AsyncStatusInternal *status
);
パラメーター
status
この操作が現在の状態を格納する場所。
解説
この操作はスレッドセーフです。
AsyncBase::ErrorCode
現在の非同期操作のエラー コードを取得します。
inline void ErrorCode(
HRESULT *error
);
パラメーター
error
この操作が現在のエラー コードを格納する場所。
解説
この操作はスレッドセーフです。
AsyncBase::FireCompletion
完了イベント ハンドラーを呼び出します。または、内部の進行状況デリゲートをリセットします。
void FireCompletion(
void
) override;
virtual void FireCompletion();
解説
1 つ目のバージョンの FireCompletion()
では、内部の進行状況デリゲート変数がリセットされます。 2 番目のバージョンでは、非同期操作が完了した場合に完了イベント ハンドラーが呼び出されます。
AsyncBase::FireProgress
現在の進行状況イベント ハンドラーを呼び出します。
void FireProgress(
const typename ProgressTraits::Arg2Type arg
);
パラメーター
arg
呼び出すイベント ハンドラー メソッド。
解説
ProgressTraits
は ArgTraitsHelper 構造体から派生しています。
AsyncBase::get_ErrorCode
現在の非同期操作のエラー コードを取得します。
STDMETHOD(
get_ErrorCode
)(HRESULT* errorCode) override;
パラメーター
errorCode
現在のエラー コードが格納される場所。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL (現在の非同期操作が閉じている場合)。
AsyncBase::get_Id
非同期操作のハンドルを取得します。
STDMETHOD(
get_Id
)(unsigned int *id) override;
パラメーター
id
ハンドルが格納される場所。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
解説
このメソッドは、IAsyncInfo::get_Id
を実装します。
AsyncBase::get_Status
非同期操作の状態を示す値を取得します。
STDMETHOD(
get_Status
)(AsyncStatus *status) override;
パラメーター
status
状態が格納される場所。 詳細については、Windows::Foundation::AsyncStatus
列挙型を参照してください。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
解説
このメソッドは、IAsyncInfo::get_Status
を実装します。
AsyncBase::GetOnComplete
現在の完了イベント ハンドラーのアドレスを、指定した変数にコピーします。
STDMETHOD(
GetOnComplete
)(TComplete** completeHandler);
パラメーター
completeHandler
現在の完了イベント ハンドラーのアドレスが格納されている場所。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
AsyncBase::GetOnProgress
現在の進行状況イベント ハンドラーのアドレスを、指定した変数にコピーします。
STDMETHOD(
GetOnProgress
)(TProgress** progressHandler);
パラメーター
progressHandler
現在の進行状況イベント ハンドラーのアドレスが格納されている場所。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
AsyncBase::OnCancel
派生クラスでオーバーライドされるとき、非同期操作をキャンセルします。
virtual void OnCancel(
void
) = 0;
AsyncBase::OnClose
派生クラスでオーバーライドされるとき、非同期操作を閉じます。
virtual void OnClose(
void
) = 0;
AsyncBase::OnStart
派生クラスでオーバーライドされるとき、非同期操作を開始します。
virtual HRESULT OnStart(
void
) = 0;
AsyncBase::put_Id
非同期操作のハンドルを設定します。
STDMETHOD(
put_Id
)(const unsigned int id);
パラメーター
id
0 以外のハンドル。
戻り値
成功した場合は S_OK。それ以外の場合は E_INVALIDARG または E_ILLEGAL_METHOD_CALL。
AsyncBase::PutOnComplete
完了イベント ハンドラーのアドレスを指定した値に設定します。
STDMETHOD(
PutOnComplete
)(TComplete* completeHandler);
パラメーター
completeHandler
完了イベント ハンドラーに設定するアドレス。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
AsyncBase::PutOnProgress
進行状況イベント ハンドラーのアドレスを指定した値に設定します。
STDMETHOD(
PutOnProgress
)(TProgress* progressHandler);
パラメーター
progressHandler
進行状況イベント ハンドラーに設定するアドレス。
戻り値
成功した場合は S_OK。それ以外の場合は E_ILLEGAL_METHOD_CALL。
AsyncBase::Start
非同期操作を開始します。
STDMETHOD(
Start
)(void);
戻り値
操作が開始される場合、または既に開始している場合は S_OK、それ以外の場合は E_ILLEGAL_STATE_CHANGE。
解説
Start()
は保護されたメソッドです。呼び出し元に戻る前に非同期操作が "ホット スタート" を行うので、外部からは参照できません。
AsyncBase::TryTransitionToCompleted
現在の非同期操作が完了したかどうかを示します。
bool TryTransitionToCompleted(
void
);
戻り値
非同期操作が完了した場合は true
。それ以外の場合は false
。
AsyncBase::TryTransitionToError
指定したエラー コードが内部エラー状態を変更できるかどうかを示します。
bool TryTransitionToError(
const HRESULT error
);
パラメーター
error
エラー HRESULT。
戻り値
内部エラー状態が変更された場合は true
。それ以外の場合は false
。
解説
この操作では、エラー状態が既に S_OK に設定されている場合にのみ、エラー状態が変更されます。 エラー状態が既にエラー、キャンセル済み、完了、または終了になっている場合、この操作の影響はありません。