В моей функции DoWork() я регистрируюсь на нашем sip-сервере. Тогда я должен ждать ответа. Однако ответ, который я получаю, получен в другом случае. Однако, прежде чем я смогу проверить флаг в DoWork(), DoWork() имеет все готовое завершение и ответ приходит после.C# присоединение потоков в фоновом рабочем документе DoWork()
Я пытаюсь найти способ подождать в DoWork(), пока не получаю ответ в событии Diagnotic. У меня есть глобальный флаг, установленный в этом событии, который я должен проверить в DoWork().
Спасибо за любые советы,
// Do work in background worker
//Will return less than 8 if there are no error message from the library
if (!this.bgwProcessLogin.CancellationPending)
{
// Register and wait for response
VaxSIPUserAgentOCX.RegisterToProxy(3600);
}
else
{
// Update label
if (this.lblRegistering.InvokeRequired)
{
// do something here
}
else
{
// Display error
}
}
// WAIT FOR A RESPONSE FROM THE DIAGNOTIC EVENT BEFORE CONTINUING - MAYBE JOIN HERE
if (!this.bgwProcessLogin.CancellationPending)
{
if (this.responseFlag)
{
// Do something here
}
else
{
// Do something else here
}
}
// Another function where I receive the response
private void VaxSIPUserAgentOCX_OnIncomingDiagnostic(object sender, AxVAXSIPUSERAGENTOCXLib._DVaxSIPUserAgentOCXEvents_OnIncomingDiagnosticEvent e)
{
string messageSip = e.msgSIP;
//Find this message in the sip header
string sipErrorCode = "600 User Found";
if (messageSip.Contains(sipErrorCode))
{
// Set global flag for response
this.responseFlag = true;
}
}
Hi (1) Что такое ответный флаг? И где он установлен в true? (2) Не могли бы вы опубликовать метод, в котором вы фактически используете фонового работника? – Grzenio
Привет. Ответ - это протокол sip, который был найден «600 пользователей». Если оно установлено в true, пользователь был найден. Я изменил код, чтобы сделать его более простым. Я думаю, что у scotty есть лучшее решение. На данный момент я собираюсь. Я отправлю обратно, когда полностью закончу. Благодарю. – ant2009