http://www.cnblogs.com/rainman/archive/2009/04/28/1445687.html http://www.laruence.com/2009/05/28/863.html