I can offer you a few tips on the best way to go about keeping in sync with your scopes. Here goes.
While putting all the commands you want to send into a single string constant and sending them all using one viWrite is the easiest way to get up and running, if an error were to occur from one of these commands, it would be really difficult to identify which command caused the error. For this reason it is better to send each command one by one and perform a *ESR? query after each command. If *ESR? returns anything except 0 then you know some sort of event/error occurred. This has the added benefit is helping to keep your code in sync as it forces your code to wait for the scope's response to the *ESR? query. You can find a VI that will make performing the *ESR? query easy if you check my forum post over at the following Link.
LabVIEW Tek Event Status Register Check
Now it would be a real pain to have to create a viWrite followed by the *ESR vi for each command. What you can do to make this easier is create a subVI that loops through the command string line-by-line only sending via viWrite one command line at a time and then after each command call the *ESR? query VI. This would look like the VI in the image below.
You can download a copy of this VI along with the *ESR? query vi below.
My other advice for synchronizing would be to use the *OPC? query where appropriate. Note that *OPC? only works with certain long running commands on the instrument and not all commands on the instrument so you shouldn't just try to use it everywhere to synchronize. Refer to the *OPC? command documentation in the Programmer's manual for a full list of commands the *OPC? command actually works with.
Note: If you want to use *OPC? to know when a waveform acquisition has completed, the scope will need to be running in the single sequence mode. (i.e. ACQuire:STOPAfter SEQuence) *OPC? does not tell you when an acquisition has completed if you are in the continuous acquisition mode. (i.e. ACQuire:STOPAfter RUNSTop)
Hope this helps!