- - PR -
コールバック手法の非同期WebService コールバックメソッド内でフォームのコントロールへのアクセス方法が
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-03-17 11:50
なんとか、処理を実現できました!!
CallBackメソッドをstaticにしていたのが問題でした。 デリゲート作成時に、test.WebForm1.TestCallBack じゃなく、おとなしくインスタンスされている this.TestCallBack を渡せばよかったんですね・・・・。 (コールバックメソッドはstaticじゃなければ駄目だと思い込んでいました) それと、CallBackメソッド内でも、キャストが間違っていたりしました。 みなさま、多くのご返答ありがとうございます! すごく勉強になりました! 以下に修正コードを載せます。 class Test { . . . . private void Button1_Click(object sender, System.EventArgs e) { localhost.Service1 s = new localhost.Service1(); System.AsyncCallback cb = new AsyncCallback(this.TestCallBack); System.IAsyncResult ar = s.BeginHelloWorld(cb,s); while(!ar.IsCompleted) { //なんらかの処理 } } public void TestCallBack(System.IAsyncResult ar) { localhost.Service1 sr = (localhost.Service1)ar.AsyncState; this.TextBox1.Text = sr.EndHelloWorld(ar); } |
|
投稿日時: 2006-03-17 16:05
ん〜どうかなぁ。
確かに呼んでくれるでしょうが、何か変な感じになりそうですね。 while(!ar.IsCompleted) { //なんらかの処理 } の「なんらかの処理」に時間を食っているから、たまたまクライアントにレスポンスを返す前にコールバックメソッドが呼ばれて、テキストボックスに値を書けているだけのような…。 # あ、いいのか。だからワザと待っているんですね。 _________________ 囚人@わんくま同盟 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-17 16:13 ] |
|
投稿日時: 2006-03-17 18:14
囚人さん
なるほど・・・・セオリーからはちょっと外れた処理なわけですね。 レスポンスを返す前に、コールバックされるから、クライアントに返る・・・・ ごもっともな事実ですが、そのような細かい視点で考えていませんでした。 漠然と「待ってりゃいいや」という考えで・・・(だったら同期にしろってことか!) そのような細かい視点をこれから身につけたいですね。 でも、この処理のコードを書こうとするなかで、いろいろ得るものがありました。 今度はAjaxの非同期通信を研究するぞ!! 囚人さん、いろいろご指摘ありがとうございます! [ メッセージ編集済み 編集者: Tanishi 編集日時 2006-03-17 18:20 ] |