2009-06-17 28 views
8

Tengo dificultades para encontrar la forma de crear la funcionalidad de formularios que quiero usar C#.Cerrar cuadro de diálogo modal desde el hilo externo - C#

Básicamente, quiero tener un cuadro de diálogo modal que tenga un período de tiempo de espera especificado. Parece que esto debería ser fácil de hacer, pero parece que no puedo hacer que funcione.

Una vez que llamo al this.ShowDialog(parent), el flujo del programa se detiene, y no tengo forma de cerrar el diálogo sin que el usuario haga clic primero en un botón.

Intenté crear un nuevo hilo utilizando la clase BackgroundWorker, pero no puedo conseguir que cierre el diálogo en un hilo diferente.

¿Me falta algo obvio aquí?

Gracias por cualquier idea que pueda proporcionar.

Respuesta

11

Utilice un System.Windows.Forms.Timer. Establezca su propiedad Interval para que sea su tiempo de espera y su controlador de eventos Tick para cerrar el cuadro de diálogo.

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; 
    } 
} 

El temporizador se ejecuta en el hilo de interfaz de usuario lo que es seguro para cerrar el formulario desde el controlador de eventos garrapata.

1

puede Invoke el cierre de su subproceso de fondo

11

Tendrá que llamar al método Close en el subproceso que creó la forma:

theDialogForm.BeginInvoke(new MethodInvoker(Close)); 
Cuestiones relacionadas