Ho qualche problema con un evento. Il problema è che a volte l'evento non viene sollevato.C# Evento non generato e Thread
Abbiamo una fotocamera di un'azienda che abbiamo implementato nel nostro software. Nel software registriamo un evento che viene attivato ogni volta che un'immagine viene scattata sulla fotocamera.
Ho notato che con un aumento del fabbisogno in termini di potenza di elaborazione (ad esempio il calcolo della media media sulle immagini e il lavoro con immagini più grandi) a volte causerà l'evento che non viene generato. Inoltre, posso farlo accadere ancora più spesso aumentando il frame-rate della videocamera. So che manca un frame perché sono contrassegnati con ID.
Nel proprio software demo sono in grado di eseguire alla stessa velocità senza problemi. Il loro software non esegue calcoli o altro, riceve e visualizza solo l'immagine.
Sono sconcertato perché questa è la connessione più vicina alla fotocamera che ho; tutto quello che posso fare è aspettare che l'evento si alzi. Vorrei chiederti se sai di qualsiasi situazione in cui un evento verrebbe ignorato.
Per me sembra che la fotocamera stia scattando un'immagine, ma per qualche motivo il fatto che non cali (sovraccarico?).
Ecco parte del codice relativo:
private void Camera_OnFrameReceived(AVT.VmbAPINET.Frame frame)
{
if (frame.ReceiveStatus == VmbFrameStatusType.VmbFrameStatusComplete)
{
if (lastID != 0 && lastID != 1)
{
if(frame.FrameID - lastID > 1)
Debug.WriteLine("HEEEEYYY SKIPPED A FRAME, ID: " + frame.FrameID.ToString() + " TOTAL LOST: " + (frame.FrameID - lastID - 1).ToString());
}
lastID = frame.FrameID;
//Debug.WriteLine("Frame received from camera");
//if the camera is in single mode, dont raise the event (frame already taken)
if (Mode == CaptureMode.Single)
return;
//set the last frame
_frameQueue.Enqueue(frame);
if (FilmFrameReady != null)
{
DateTime dateTime = Accurate.DtNow;
frameTaken = false;
FilmFrameReady(this, new FilmFrameReadyArgs(this, dateTime));
}
}
}
Come potete vedere prendo il telaio, inserirlo in una coda, e poi dire le mie classi di fuori che c'è qualcosa per loro di recupero. Sto rilasciando il thread dell'evento il più rapidamente possibile.
Sommario:
mio caso a volte non è sollevato. Penso che sia perché il thread principale sta lavorando troppo duramente.
Avete qualche esperienza con eventi a volte non sollevati?
Sembra un problema con la lib di terze parti che stai utilizzando e non il tuo codice. Tuttavia, se potessi mostrare un codice che sarebbe un inizio ... – James
Anche se così tanto fino a quando ho iniziato il loro programma dimostrativo e ha funzionato bene. Ho incluso del codice – Tallkotten