quale versione del framework utilizza? Se hai a disposizione il framework 4 puoi sfruttare la classe Task, eseguendo il metodo in questione wrappato in un task e chiamando il metodo Wait che ha un overload che implementa proprio la possibilità di passare un valore di timeout:
http://msdn.microsoft.com/en-us/library/dd235606(VS.100).aspx
var task = Task.Factory.StartNew(() => Leggi());
// .net fx 4.5
// var task = Task.Run(() => Leggi());
if (!task.Wait(TimeSpan.FromSeconds(30)) throw new TimeoutException();
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic