【使い方】
Web Service で非同期メソッドを呼び出すサンプルです。
// myService は、Webサービス
// EndMethod は、処理結果取得の非同期コールバックメソッド
// myIAsyncResult は、IAsyncResultインターフェイス(非同期操作のステータスを表します)
// AfterReturnValueMethod は、非同期完了後に呼び出されるコールバックメソッド(AfterCallbackObjectHandler)
// 非同期終了(Callback)メソッドを設定する
EndMethod = new CallbackObjectHandler( myService.EndGetShareRate );
// 非同期開始時に受け渡すパラメータを設定する
object asyncState = new AsyncGetObject( parentForm, Args, EndMethod
, new AfterCallbackObjectHandler( AfterReturnValueMethod ))
// 指定日の Object の値を取得する
try
{
myIAsyncResult = myService.BeginGetShareRate( nType, targetDate, new System.AsyncCallback( GetObjects_CallBack )
, asyncState )
}
catch( Exception ex )
{
MessageBox.Show("指定日の Object の値を取得開始に失敗しました。", "エラー",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Object値取得非同期のメソッドの完了時コールバックメソッドのサンプルです。
/// <summary>Object取得非同期コールバックメソッドハンドラ。</summary>
public delegate object CallbackObjectHandler( System.IAsyncResult ar );
/// <summary>Object取得後処理メソッドハンドラ。</summary>
public delegate void AfterCallbackObjectHandler( object value, bool status, object args );
/// <summary>
/// Object値取得非同期のメソッドの完了時コールバックメソッド。
/// </summary>
/// <param name="ar">非同期操作のステータス。</param>
public void GetObject_CallBack( System.IAsyncResult ar )
{
//=======================
// データの取得
//=======================
Debug.WriteLine("GetObject_CallBack Start");
// 非同期メソッド実行パラメータを取得する
AsyncGetObject agv = (AsyncGetObject)ar.AsyncState;
// 初期値を設定する
object value = 0;
bool rtsFlag;
try
{
// 値取得メソッドを起動する
value = ((CallbackObjectHandler)agv.EndMethod)(ar);
rtsFlag = true;
}
catch( Exception ex )
{
rtsFlag = false;
Debug.WriteLine("ReadYearEndData Error:" + ex.Message);
}
// 後処理メソッドの設定を確認する
if ( agv.AfterMethod == null )
throw new ArgumentException("値取得後処理メソッド\"AfterMethod\"が設定されていません。");
// 取得した値・結果ステータス及び引数をパラメータとして後処理メソッドを実行する
this.Parent.Invoke( agv.AfterMethod, new object[]{value, rtsFlag, agv.Args} );
// 非同期メソッド実行パラメータを開放
agv = null;
}
|