I am creating a software application that is able to update itself. After the start, the application checks if there are updates avaiable, download those files (assemblies),
Most of updater have a bootstrapper executable that performs the update of the main application.
The idea is to run the bootstrapper instead of your application. Then the bootstrapper apply any update if required, before launching the actual application.
Another technique (I never tried, it's only a clue) is to use shadow assemblies. The concept is to "duplicate" the assembly on the file in order to avoid file in use locking.
Finally, you can take a look at clickonce which can easily create self updating applications, if you accepts the drawbacks of this mechanism.