The BeginWrite is asynchronous meaning that it will queue the request and immediately return to your code. This keeps from holding up the UI thread while the write is being attempted. The down side is that it is up to you to regulate the speed of the writes so you do not overflow the queue. For 32 values being written individually, it would amount to about 320ms which would not be very noticeable to the person clicking the button.
If your values are in an array, it is better to use Write(startAddress, numberOfElements, values()) because it will write them in a single packet which takes only about 10ms. If the UI delay is of concern, I would probably use a Background worker and the Write method. That way it won't hold up the UI and it let's the driver regulate the speed of submitting the write requests.