it's very important to put the
IQTracker.IQ method inside a try/catch because it awaits for a response during the timeout you set, if it doesn't recieve it fires an exception (and that happens very frequently), the most important is to send the IQ, you can use IQHandler to recieve an IQ response .
const int myTimeOut = 500;
jabber.protocol.client.IQ MyIQ = new jabber.protocol.client.IQ(new XmlDocument());
IQTracker myIQTracker= new IQTracker(myJabberClient);
try
{
jabber.protocol.client.IQ iq = myIQTracker.IQ(MyIQ, myTimeOut );
}
catch(Exception e)
{
}
done.Set();