If you answered “you’re using hardcoded string instead of application resource” you are of course right, but that’s not the worst problem with it, so no cookie for you. If the user clicks the application bar button twice before the message box is shown it crashes:
The interesting thing about this stack trace is that it contains two calls to MessageBox.Show(). WTF? Since MessageBox.Show() returns the value, I assumed it’s a synchronous call, i.e. no stuff would happen until the user clicks “OK”. Apparently MessageBox opens internal event loop (which kind of makes sense, since something has to handle the user clicking “OK”), which handles the second application bar click, tries to open the second message box and the whole application blows up.
Now, you may say “It’s only a problem if the user intentionally bangs the poor phone like an ADD afflicted monkey on speed”. I say “Fix your god damn app” (and in case anyone from Microsoft would ever read this, I also say “Fix your god damn framework”).
So what can we do? Using lock is out of the question, since everything is executed in the same thread. So the only option I came up with is a Crappy Boolean Flag Pattern: