2013-03-26 3 views
0

Я использую цикл for для совершения звонков для списка номеров. Я хочу взять первое число из списка и сделать звонок и дождаться ответа, а затем перейти к следующему номеру в списке. Я использовал AutoResetEvent, чтобы сделать это. Но он не работает.Как приостановить цикл «за» до получения ответа

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

+0

'Set' и сразу' WaitOne' не имеет смысла ... Уверены ли вы, что у вас нет ошибки копирования-вставки (я бы ожидал 'Reset' перед вызовом, а не' Set' после ....) –

+0

You нужно задать другой поток для установки события. Есть ли способ узнать, продолжает ли вызов после вызова «Пуск»? –

ответ

0

Set и сразу WaitOne не имеет смысла - ждать не нужно будет ждать, пока что-нибудь и немедленно продолжить.

Скорее всего, должны быть сброшены с вызовом ожидания:

waitingToPickUp.Reset(); 
    phoneCall.Start(); 
    waitingToPickUp.WaitOne(); 
Смежные вопросы