Originariamente inviato da snake88m
grazie MItaly ho provato e il tuo metodo funziona. ... anche se non ho ben capito perchè ...
Quando tu chiami DoEvents crei un nuovo message loop che recapita tutti i messaggi delle finestre del thread corrente alle appropriate window procedure; tuttavia tra questi messaggi potrebbe esserci anche il WM_TIMER (quello che il .NET Framework traduce in un evento Timer.Elapsed), dal momento che hai impostato un intervallo di tempo piuttosto piccolo, per cui la DoEvents richiamerà timer_Elapsed, il quale a sua volta richiamerà la DoEvents, che probabilmente richiamerà timer_Elapsed e così via fino a quando lo stack non si esaurisce (guardando lo stack trace al momento dell'errore potrai avere conferma della mia spiegazione).
codice:
private void riceviDati()
        ...
Per caso anche riceviDati viene richiamato da un evento del form?
Non ti conviene eseguire la ricezione dei dati in un thread separato lasciando stare la DoEvents?