Close modal dialog from external thread - C#
c#, user-interface, winforms
Solution
Use a System.Windows.Forms.Timer. Set its Interval property to be your timeout and its Tick event handler to close the dialog.
partial class TimedModalForm : Form
{
private Timer timer;
public TimedModalForm()
{
InitializeComponent();
timer = new Timer();
timer.Interval = 3000;
timer.Tick += CloseForm;
timer.Start();
}
private void CloseForm(object sender, EventArgs e)
{
timer.Stop();
timer.Dispose();
this.DialogResult = DialogResult.OK;
}
}
The timer runs on the UI thread so it is safe to close the form from the tick event handler.
Problem
I am struggling to find a way to create the Forms functionality that I want using C#. Basically, I want to have a modal dialog box that has a specified timeout period. It seems like this should be easy to do, but I can't seem to get it to work. Once I call `this.ShowDialog(parent)`, the program flow stops, and I have no way of closing the dialog without the user first clicking a button. I tried creating a new thread using the BackgroundWorker class, but I can't get it to close the dialog on a different thread. Am I missing something obvious here? Thanks for any insight you can provide.