PreloadAsync only makes sure that the assets of the instance and their descendants you’re passing are the first in the download queue so that they are hopefully ready by the time you need them. It does not guarantee that your assets will be instantly available. This is what a loading screen is for.
By the way, you don’t need to pass items individually like this. If you just pass the Gui through to PreloadAsync, it will also register all the descendants of that instance and any related assets.