У меня есть внешний COM-объект, который подключается к серверу, а затем запускает событие, когда сервер готов. Таким образом, вызов connect () выполняется асинхронно.
Мой код выглядит (немного ...) как
ManualResetEvent waitConnection;
//This is the event that is triggered when server is ready
public void onConnection_event(bool success)
{
if(success)
waitConnection.Set();
}
private string getItem(string itemName)
{
//MYDBCom is a win32 com if that makes any difference
MYDBCom myDBobject = new MYDBCom();
waitConnection = new ManualResetEvent(false);
myDBobject.connect(); //asynchron call.
//wait until server triggers the onConnection_event
waitConnection.WaitOne();
//server is now ready. Get the data from the server.
return myDBobject.getItem(itemName);
}
Проблема в том, что событие не вызвано - оно кажется заблокированным во время ожидания в WaitOne. Если я вместо waitOne использую
while(!connected)
{
Sleep(100);
DoEvents();
}
событие вызвано.
Есть идеи, почему блоки WaitOne? Есть ли другие предложения, как ждать, пока событие не сработает?
// Фредрик