puoi provare con un timer. Imposti il timeout a 30sec e quando scatta l'evento elapsed controlli quanti bytes hai scaricato.
Verifica che il tutto sia thread-safe (usa variabili globali e statiche) e magari puoi stoppare il download sempre nell'evento elapsed.
Questa è la prima idea che mi è venuta, magari ci sono altre soluzioni migliori