Timer events (from Windows Forms Timer) are dispatched from the main message loop. So they will never overlap with the handler for any other UI event.
The button press will go into the message queue, and be processed after the timer Tick handler completes. (As a result, you don't need a lock for data structures which are only manipulated by UI event handlers, since they will run sequentially, in the order they were queued)