forget #1 (too slow, too late)
easy enough to try #2 ...
if you want to be "friendly", you could consider #3:
set a global flag on first click
on second (3rd, 4th clicks), sub checks flag
if flag is set, user sees message telling her to wait (then sub returns)
when job is done, you unset the global flag
with #2, you prevent crash, but user doesn't know what's going on and might just start clicking more to get some response from app.
also, in general, you don't want users tapping buttons at random or accidentally. unexpected stuff can happen. if button is clicked when it shouldn't be clicked, you should be ready to say something and take control.