2013-03-26 67 views
0

我正在使用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

回答

0

Set,並立即WaitOne是沒有意義的 - 等待將不再需要等待什麼並立即繼續。

最有可能的應該是復位呼叫等待:

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