Tengo una aplicación de formularios windows forms que se abrirá otras formas, pero sólo mostrará las formas de un par de segundos (configurable por el usuario). Normalmente hago algo como enhebrar.subproceso.dormir(n), sin embargo al hacer esto, los controles de formularios no carga solo el fondo blanco de muestra, y también he estado leyendo que esta no es la mejor práctica para lo que estoy después de que la entrada del usuario no se tramite hasta que el hilo se despierta.

Me han llegado a través de las personas el uso del Sistema.Los temporizadores.Temporizador(n), pero estoy luchando para conseguir que esto funcione, para mí, el formulario sólo abrir y cerrar inmediatamente (sólo se puede ver un flash como se abre el formulario a continuación, se cierra).

El código que estoy utilizando es:

Private Shared tmr As New System.Timers.Timer    
aForm.Show()
tmr = New System.Timers.Timer(aSleep * 60 * 60)
tmr.Enabled = True

aForm.Close()

Todo esto está contenido dentro de un Private sub que pasa de la forma y la define el tiempo de ejecución.

Mi intención es tener la principal aplicación que se ejecuta desde la barra de tareas, a continuación, llama a una de las formas que se mostrará durante un período de tiempo definido, cierre el formulario, a continuación, llamar a otro uno de los formularios.

Es cualquier poder que me apunte en la dirección correcta de por qué se abre el formulario a continuación, se cierra sin ver a través de el se define el tiempo de ejecución (he estado probando con 10 segundos), o hay una mejor manera de hacer lo que estoy buscando?

Su ayuda es muy apreciada.

Matt

OriginalEl autor Lima | 2010-12-22

6 Comentarios

  1. 7

    la documentación decir que haya Transcurrido un controlador de eventos que se llama cuando el tiempo transcurre. Usted tendría que cerrar el formulario en el controlador:

    http://msdn.microsoft.com/en-us/library/system.timers.timer%28VS.85%29.aspx

    Acabo de escribir un pequeño ejemplo que muestra lo que usted necesita hacer en:

    http://www.antiyes.com/close-form-after-10-seconds

    A continuación está el código correspondiente, el pleno de la solución puede ser descargado desde el artículo.

    Formulario 1 código

    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim frm2 As New Form2()
            frm2.ShowDialog()
        End Sub
    
    End Class

    Formulario 2 del código

    Imports System.Timers
    
    Public Class Form2
    
        Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
            MyBase.OnLoad(e)
            Dim tmr As New System.Timers.Timer()
            tmr.Interval = 5000
            tmr.Enabled = True
            tmr.Start()
            AddHandler tmr.Elapsed, AddressOf OnTimedEvent
        End Sub
    
        Private Delegate Sub CloseFormCallback()
    
        Private Sub CloseForm()
            If InvokeRequired Then
                Dim d As New CloseFormCallback(AddressOf CloseForm)
                Invoke(d, Nothing)
            Else
                Close()
            End If
        End Sub
    
        Private Sub OnTimedEvent(ByVal sender As Object, ByVal e As ElapsedEventArgs)
            CloseForm()
        End Sub
    
    End Class

    De curso para que este código funcione tendría formas de configuración con los botones.

    Estoy fallando para ver cómo podía hacer uso de este, estoy deseando cerrar el formulario después de que el temporizador ha transcurrido, pero con este no puedo ver una manera de pasar el nombre del formulario para la OnTimedEvent Sub, y Me llama.Close() de la sub resulta en un error que estoy tratando de acceder a un hilo de otro hilo.
    He editado mi respuesta y dio un ejemplo más completo. ir a antiyes.com/close-form-after-10-seconds para descargar el ejemplo vs2008 solución.

    OriginalEl autor John Boker

  2. 2

    El código establece un temporizador, a continuación, inmediatamente se cierra el formulario. El cierre se debe hacer cuando se desencadena el evento de temporizador.

    OriginalEl autor martona

  3. 2

    Creo que se puede expandir en Jonathan respuesta un poco.

    En el formulario que desea mostrar para una determinada cantidad de tiempo, agregar un contador de tiempo (en este ejemplo, el temporizador se denomina Timer1…Temporizadores se pueden encontrar en la toolbax, sólo tienes que arrastrar en el formulario)

    Para el cierre después de que se ha mostrado para una cantidad de tiempo dada en marcha el cronómetro en el método onload del formulario:

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Do initialization stuff for your form...
        'Start your timer last.
        Timer1.Start()
    End Sub

    Esto iniciará el temporizador. Cuando el preset de que transcurra el tiempo, el evento tick voluntad de fuego. En este caso el lugar de su formulario de código de cierre:

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Close the form after 1 tick.
        Me.Close()
    End Sub

    Para cambiar cuánto tiempo debe transcurrir antes de que el temporizador de paso, cambiar el temporizador de intervalo de la propiedad.

    'Changing the time from outside the Form1 class...
    Form2.Timer1.Interval = 2000 '2 seconds, the interval is in milliseconds.

    Completo de código de form1 tiene un botón que ajusta el temporizador de intervalo y, a continuación, abre form2.

    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Form2.Timer1.Interval = 2000
            Form2.Show()
        End Sub
    End Class
    
    
    Public Class Form2
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Do initialization stuff for your form...
            'Start your timer last.
            Timer1.Start()
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Close()
        End Sub
    End Class

    Espero que esto ayude, quisiera saber si me puede repetir cualquier cosa de una manera más clara la moda 🙂

    OriginalEl autor paradoX

  4. 1

    Acaba de pegar un componente de tiempo en el formulario y activarlo. En el controlador de eventos tick, determinar cuánto tiempo desde el formulario abierto y si la intención de que el período que transcurre, cierre el formulario.

    Permitiendo que el Form_Load manejar para volver mientras espera para el evento Tick, el formulario se permite pintar y hacer todo lo demás lo haría normalmente.

    Mientras que usted podría crear el tiempo de código como lo están haciendo, no estoy seguro de por qué. Y que sin duda necesita para configurar un controlador para el evento Tick para que haga ningún bien.

    Puede usted dar un ejemplo o enlace en cómo determinar el tiempo (en ms) desde el formulario se abre? He intentado buscar en la WWW, pero no estoy teniendo mucho éxito hasta el momento.
    No estoy en mi máquina de desarrollo ahora mismo. Pero basta con crear una variable de formulario de tipo DateTime y la puso a DateTime.Ahora en el Formulario de Carga del controlador de eventos. Luego, en el controlador de eventos Tick, acaba de calcular cuánto tiempo ha pasado. Usted tendrá problemas para ser exacta a la millisecons, pero usted debería ser capaz de acercarse lo suficiente.

    OriginalEl autor Jonathan Wood

  5. 0

    Un real simple manera de abrir un formulario por un tiempo determinado (y, en este ejemplo) temporizador de omitir si frmTemperatureStatus está cerrado. Estoy abriendo frmTemperatureStatus como una forma normal, no como un diálogo de lo contrario el código de saltos a esta forma y no vuelve hasta que se cierra el formulario. El DoEvents mantiene frmTemperatureStatus sensible (Nota: frmTemperatureStatus va a seguir perdiendo el foco si se prueba el código línea por línea como foco mantiene volver a Visual Studio).

                timeIncubation_End_Time = Now.AddMinutes(1)
                Me.Enabled = False
                frmTemperature_Status.Show()
    
                Do While frmTemperature_Status.Visible And timeIncubation_End_Time > Now
                    Application.DoEvents()
                    Threading.Thread.Sleep(100)
                Loop
                frmTemperature_Status.Close() ' This line doesn't cause an error if the form is already closed
                Me.Enabled = True
                MsgBox("End of dialog test")

    OriginalEl autor Kristian

  6. 0
    Public Class Form1
        Dim second As Integer
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Interval = 1000
            Timer1.Start() 'Timer starts functioning
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Label1.Text = DateTime.Now.ToString
    
            second = second + 1
            If second >= 10 Then
                Timer1.Stop() 'Timer stops functioning
                Me.Close()
                MsgBox("Timer Stopped....")
            End If
    
        End Sub
    
    End Class

    OriginalEl autor erik klenovics

Dejar respuesta

Please enter your comment!
Please enter your name here