The problem is that I am trying to use WIN-API style synchronization between a few threads. The multithreading model is COM-based (i.e. using CoInitialize, CoGetInterfaceAndReleaseStream, etc). I have a public array of events (long) and some threads Wait(ing)ForMultipleObjects on it. When I try to SetEvent on one of the array elements I get all the elements in the array signaled and the wait function returns of course WAIT_OBJECT_0. Please dont ask me to rewrite entire project in C or to use standard VB. Is there anybody who knows whats wrong with this SetEvent function?