To pop-up a message box, I'm using MessageBox.Show(...). I usually wrap the call in an Invoke:
BeginInvoke (new Action (() => {
MessageBox.Show ());
}));
(I removed a part of the original question which was answered elsewhere)
Do I always need to wrap the MessageBox call in an (Begin-)Invoke if I'm calling from a non-GUI thread?