0

GetというメソッドとXというコールバックメソッドがC#で記述されています。Getメソッドから_nameを返す必要がありますが、コールバックが終了した後にのみ_nameの実際の値を取得できます。コールバックが終了するまで*の時点で停止します。その後、私だけが_nameを返すことができます。したがって、コールバックが終了したかどうかを確認する必要があります。

上記のシナリオの解決策を達成するにはどうすればよいですか?誰かがこれに対する解決策を提案できますか

私の方法はこんな感じです

string _name ;

public string Get()
{
     //Some Statements
     //Asynchronous call to a method and its call back method is X


     *Want to stop here until the Call back is finished

     return _name ;
}

private void X (IAsyncResult iAsyncResult)
{
     //Call Endinvoke and get the result
     //assign the final result to global variable _name 
}
4

2 に答える 2

2

から待機ハンドルを使用して、 IAsyncResult.AsyncWaitHandleWaitOne()を呼び出します。それが完了するまでブロックされます。

  IAsyncResult result = Something.BeginWhatever();
  result.AsyncWaitHandle.WaitOne(); //Block until BeginWhatever completes

より完全な例については、msdnの記事「AsyncWaitHandleを使用したアプリケーション実行のブロック」を参照してください。

于 2012-06-18T23:29:25.307 に答える
1

ManualResetEventを使用して、完了を通知します。

   string _name;
   ManualResetEvent _completed = new ManualResetEvent();

   public string Get()
   {
     //Some Statements
     _completed.Reset();
     //Asynchronous call to a method and its call back method is X


     //*Want to stop here until the Call back is finished
     _completed.WaitOne();

     return _name ;
   }

   private void X (IAsyncResult iAsyncResult)
   {
     //Call Endinvoke and get the result
     //assign the final result to global variable _name 
     _completed.Set();
   }
于 2012-06-19T00:20:14.613 に答える