2012-01-19 6 views
0

私はSilverlight開発が初めてです。 私はサーバー上で認証を行うミニテストアプリケーションを作成します。 私はWCF WebServicesを通じて作成した通信です。WebServiceの非同期呼び出しを簡略化する方法はありますか

iは毎回

1このシーケンスを使用しなければならないWebサービスのLogin(string, int)メソッドを使用する)イベントハンドラ

_ltsCl.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(_ltsCl_LoginCompleted);

ここvar _ltsCl = new LoginToServerServiceClient();

LoginToServerServiceであるとデータメンバーを初期化しますWebServiceクラス

2)この

bool result = _ltsCl.Login(txtUsername.Text, int.Parse(pbxPassword.Password)); 

答えて

2
のような方法何かでこのシーケンスを簡素化することが可能です

_ltsCl_LoginCompleted(object sender, LoginCompletedEventArgs e){}

で結果を得る)非同期メソッド_ltsCl.LoginAsync(txtUsername.Text, int.Parse(pbxPassword.Password));

を呼び出します

完全コールバックを匿名メソッドとして定義できます。

_ltsCl.LoginCompleted += (sender, e) => 
{ 
    var result = e.Result; 
}; 
_ltsCl.LoginAsync(txtUsername.Text, int.Parse(pbxPassword.Password)); 

あなたが示されている構文:

bool result = _ltsCl.Login(txtUsername.Text, int.Parse(pbxPassword.Password)); 

は、処理中のブロック呼び出し元のスレッド同期呼び出しで可能であり、この処理が完了した後、結果を返します。直ちに呼び出しスレッドに制御を返す非同期メソッドには意味がありません。

しかし、Silverlightでは同期ブロッキング呼び出しが禁止されているため、このような可能性はありません。

関連する問題