Make sure you close "everything" down before you run the defrag. You may have something running in the background as well in down in TaskManager. Something like an IM client, file sharing client, etc. Anything like that may cause a defrag to halt at a certain % since the app is hitting file(s) and defrag is trying to move them.
Like everyone else has said though, Defraggler will give you a bit more control. The end results of the defrag itself won't be much different, the algorithm is basically the same regardless if it's the built-in Windows 7 defrag moving small /sequential files together or a 3rd party defrag. However the UI and ease of use will vary, as well as the ability to do things such as defrag your MFT, scheduled defrags, boot-time, etc..
Speaking of boot-time defrag, that's something you may also want to try. A quick Google search will walk you through that with Windows 7 if you don't switch to something like Defraggler.