I have a .NET application where I restore a number of databases using SMO. The timeout setting in the connection string is set to 0 (unlimited). Most databases restore fine,
There are two timeout settings for SMO - one is the ConnectionTimeOut settings, and the other is the StatementTimeOut setting - you need to make sure you are setting the right one: http://social.msdn.microsoft.com/Forums/en-US/sqldisasterrecovery/thread/b4000547-7a48-4bda-9a68-ac646259e7d2/
This is another question with a specific issue that resolved their problem: SMO ConnectionContext.StatementTimeout setting is ignored
Hope this helps...
Also, there is a poweshell script that 'supposedly' works well for large databases.. http://devio.wordpress.com/category/automssqlbackup/