【发布时间】:2010-10-24 05:05:19
【问题描述】:
在我的 DoWork() 函数中,我向我们的 sip 服务器注册。然后我必须等待回复。但是,我得到的响应是在另一个事件中收到的。但是,在我能够检查 DoWork() 中的标志之前,DoWork() 已经准备就绪,并且响应随之而来。
我试图找到一种方法来等待 DoWork() 直到我在诊断事件中得到响应。我有一个在该事件中设置的全局标志,我必须检查 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;
}
}
【问题讨论】:
-
嗨 (1) 什么是响应标志?它在哪里设置为真? (2) 能否贴出实际使用后台worker的方法?
-
你好。响应是 '600 user found' sip 协议。如果已设置为 true,则已找到用户。我确实更改了代码以使其看起来更简单。我认为斯科蒂有最好的解决方案。我现在就这样做。当我完全完成后,我会回帖。谢谢。
标签: c# multithreading join backgroundworker