You cannot do this with the MessageDialog. You'd need to create a Windows form (we'll call this the dialog form) and then call the Hide method after a few seconds. I would use a Parallel Process. On one one thread, show the dialog form, on the other, call SignalWait (add a SignalComponent to the GlobalContainer). On the completion of both threads, you would continue. On the SignalWait thread, wait for the amount of time that you'd like the dialog visible. If it returns true, do nothing. If it returns false, call the Hide() method of the form.
On a separate automation, use the VisibleChanged event of the dialog form to check its Visible property. If Visible is false, call the SignalAll() method of the Signal component (this will release anything waiting on it and have those return True).
As Thomas indicated, the MessageDialog uses the ShowDialog method to be shown which blocks the thread. If you want to suspend action ShowDialog is the way to go. If you are just wanting to provide information but allow the user to work, then use the Show method on a form as suggested. Either way, you have complete control when you use a Form instead of the MessageDialog.
An alternate way to close the form would be to place a timer on the form. On VisibleChanged (Visible=true) start the timer and on the Tick event hide the form if you used Show or set the DialogResult if you used ShowDialog and then stop the timer.