如何暂停“for”循环直到获得响应

问题描述:

我正在使用for循环拨打电话以获取数字列表。 我想从列表中选取第一个号码并拨打电话并等待答复,然后继续进入列表中的下一个号码。 我已经使用AutoResetEvent来做到这一点,但它不工作。如何暂停“for”循环直到获得响应

for (int k = 0; k < list_Items.Count; k++) { 
    Number_To_Call = "9" + list_Items[k].ToString(); 

    phoneCall.Start(); 

    waitingToPickUp.Set(); //AutoReset Event 

    Thread.Sleep(); 

    waitingToPickUp.WaitOne(); 

    string detector = VoiceDetected; 

    if (detector == "Machine") { 
     //code 
    } else if (detector == "Human") { 
     //code 
    } else { 
     //code 
    } 
} 

代码得到响应形成呼叫

void phoneCall_CallStateChanged(object sender, VoIPEventArgs<CallState> e) 
     { 
      if (e.Item.IsInCall()) 
      { 
       phoneCallAudioReceiver.AttachToCall(phoneCall); 
       phoneCallAudioSender.AttachToCall(phoneCall); 
       manchineDetector.Start(); 
       waitingToPickUp.Set(); 

       string str = VoiceDetected; 

      } 
      else if (e.Item.IsCallEnded()) 
      { 
       phoneCallAudioReceiver.Detach(); 
       phoneCallAudioSender.Detach(); 
       manchineDetector.Stop(); 
       phoneCall = null; 

       //Number_To_Call = string.Empty; 

       InvokeOnGUIThread(() => 
       { 
        Number_To_Call = string.Empty; 
       }); 
      } 
     } 

代码检测机器或人

void manchineDetector_DetectionCompleted(object sender, VoIPEventArgs<AnswerMachineDetectionResult> e) 
     { 
      try 
      {  
       string VoiceDetected = e.Item.ToString();  

      } 
      catch (Exception ex) 
      { 
      } 
     } 
+0

您可能需要提及您正在使用,以帮助人们查询其VOIP软件。 – lzcd 2013-03-26 01:33:52

+0

'Set'立即'WaitOne'没有任何意义......你确定你没有复制粘贴错误(我希望在拨打电话之前进行Reset操作,而不是在后面执行Set操作) – 2013-03-26 01:39:26

+0

You需要另一个线程来设置事件。在“开始”调用之后,有没有办法判断这个调用是否还在等待? – 2013-03-26 01:39:52

Set,并立即WaitOne是没有意义的 - 等待将不再需要等待什么并立即继续。

最有可能的应该是复位呼叫等待:

waitingToPickUp.Reset(); 
    phoneCall.Start(); 
    waitingToPickUp.WaitOne();