Я использую цикл 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)
{
}
}
Вы, возможно, потребуется упомянуть, какое программное обеспечение VOIP вы используете, чтобы помочь людям с вашим запросом. – lzcd
'Set' и сразу' WaitOne' не имеет смысла ... Уверены ли вы, что у вас нет ошибки копирования-вставки (я бы ожидал 'Reset' перед вызовом, а не' Set' после ....) –
You нужно задать другой поток для установки события. Есть ли способ узнать, продолжает ли вызов после вызова «Пуск»? –