Sfondo
Abbiamo qui un pezzo di hardware programmabile al lavoro che integriamo in quasi tutti i nostri sistemi. Questo pezzo di hardware è venuto con una DLL nativa di Windows (per la quale non abbiamo il codice sorgente) e un wrapper per detta libreria. Questo wrapper è responsabile solo del marshalling delle chiamate verso l'API nativa fino al livello .NET e nulla più. Pertanto, utilizziamo questo wrapper per effettuare chiamate all'API nativa.
Questo pezzo di hardware programmabile è fisicamente integrato nel nostro prodotto in un modo molto problematico. Il pezzo di hardware si trova nel prodotto in modo tale che ogni tanto il cavo USB viene tagliato a metà ... (non chiedere) Il problema è che il cavo tende a dimezzarsi quando siamo in profondità nell'API nativa. Quando ciò accade, il chiamante non ritorna dalla funzione API nativa. Di seguito è riportato un frammento di come appare la chiamata tramite wrapper :
public static UInt32 Wrap(UInt32 configval, Int32 channum, IntPtr handleval)
{
if (IntPtr.Size == 4)
return Native32(configval, channum, handleval);
else
return Native64(configval, channum, handleval);
}
Domanda
Esiste un metodo generale per assicurarci che non ci si blocchi all'interno dell'API?
So già che posso iniziare un'attività e attendere con un timeout (riprendi solo se scade). Questo metodo funziona, ma esiste un altro modo per farlo? Non ho alcun controllo su ciò che accade all'interno dell'API.