Bonjour,
je veux réaliser un programme en C# qui gère le déclenchement d'une prise de vue d'une caméra par un bouton externe.
pour cela je dois gérer des evenements.
je commence par créer mes evenements :
// Création de l'evenement
eventTrigger = CreateEvent(IntPtr.Zero, false,false,null); // evenement sur le déclenchement de la prise de vue
eventFrame = CreateEvent(IntPtr.Zero, false,false,null); // evenement sur la disponibilité d'une image
j'initialise les evenements avec les fonctions de ma caméra :
int res = m_uEye.InitEvent(eventFrame.ToInt32(), uEye.IS_SET_EVENT_FRAME);
res = m_uEye.InitEvent(eventTrigger.ToInt32(), uEye.IS_SET_EVENT_EXTTRIG);je lance un thread qui va attendre un des evenements.
threadTrigger = new Thread(new ThreadStart(ThreadTriggerFunction));
// Démarrage du thread pour le trigger
threadTrigger.Start();ensuite ma fonction du thread est la suivante :
private void ThreadTriggerFunction()
{
if (!threadTrigger.IsAlive)
return;
// Create an AutoResetEvent object to wrap the handle we got from OpenEvent
AutoResetEvent arEventFrame = new AutoResetEvent(false);
AutoResetEvent arEventTrigger = new AutoResetEvent(false);
arEventFrame.Handle = eventFrame; // Set the Handle to the event from
arEventTrigger.Handle = eventTrigger; // Set the Handle to the event from
WaitHandle[] waitHandles;
waitHandles = new WaitHandle[2];
//Put it in our array for WaitAny()
waitHandles[0] = arEventFrame;
waitHandles[1] = arEventTrigger;
// Tant que la caméra est branché
while (threadTrigger.IsAlive)
{
// On declenche la capture
if (lanceCapture)
{
// attente de l'evenement du trigger
int waitResult = WaitHandle.WaitAny(waitHandles, nTimeOut, false);
// traitement de l'evenement
// For timeout, just loop and wait again
if (waitResult == WaitHandle.WaitTimeout)
{
Console.WriteLine(" WaitAny timed out.");
}
else if (waitResult == 0)
{
Console.WriteLine("0 == waitResult. Yippee !!!");
// Do Something
}
else if (waitResult == 1)
{
Console.WriteLine("1 == waitResult !!!");
// Do Something Else
}
// On a capture l'image ou le temps d'attente est dépassé
lanceCapture = false;
} // Fin if (lanceCapture)
else
{
Thread.Sleep(100);
}
}
}
mon souci est que la fonction WaitHandle.WaitAny me renvoie toujours le fait qu'il n'y a pas eu d'evenement. donc je ne comprends pas ou je me trompe car j'ai repris ce fonctionnement sur un programme C++ qui marche très bien.
Si vous avez la moindre idée du problème ou que vous voulez plus d'explication je pense que je suis sur ce problème encore un petit moment donc n'hésiter pas à me contacter.
merci d'avance.