el Guille, la Web del Visual Basic, C#, .NET y más...

WaitSeconds: Un método para esperar los segundos indicados

 
Publicado el 20/Nov/2007
Actualizado el 20/Nov/2007
Autor: Guillermo 'guille' Som

WaitSeconds: Un método para esperar los segundos indicados (en español: EsperarSegundos).
Y como de costumbre, con código para VB como para C#.



 

Introducción:

Pues eso... una función (o método) para esperar el número de segundos indicados.
La cantidad de segundos puede ser fraccionaria, pero no esperes demasiada precisión, ya que no está pensada para que sea muy exacta, pero al tener decimales, te permitirá no tener que hacer pausas de segundo en segundo, que es en realidad lo que yo iba buscando cuando la codifiqué.

El código que te voy a mostrar es válido para las versiones de .NET Framework 2.0 o superior, en el caso de que uses una versión anterior, (al menos en Visual Basic), tendrás que usar métodos que hagan la comparación de qué valor es mayor.

En ese código (tanto para Visual Basic como para Visual C#) te muestro el método WaitSeconds y el método Main de una aplicación de consola que lo usa para que veas cómo usarlo... (valga la redundancia), aunque no es complicado, ya que solo hay que pasarle un valor Double con el lapso en segundos a esperar, por ejemplo WaitSeconds(1.5) para esperar un segundo y medio.
(En una de las versiones que uso, en vez de usar Double usé Decimal, pero para el caso es casi lo mismo, ya que el "truco" está en convertir los segundos indicados en una cadena para asignar a un tipo de datos de tipo TimeSpam.)

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

Nota:
Si quieres ver una función parecida para Visual Basic 6.0, mira la colaboración de mi amigo Joe LeVasseur: Timer y Medianoche, publicado el 9 de Febrero de 1997 (sí, más de 10 años, por tanto, era para el VB4/VB5)

 


Código para Visual Basic.NET (VB.NET) El código para Visual Basic .NET (Visual Basic 2005 o superior)
Module Module1

    Sub Main()
        Dim d1, d2 As DateTime

        Dim d As Double
        Dim segundos() As Double = {1.5, 2.3, 1.25, 2.99}


        For i As Integer = 0 To segundos.Length - 1
            d = segundos(i)
            Console.WriteLine("Esperando... {0} segundos", d)
            d1 = DateTime.Now
            WaitSeconds(d)
            d2 = DateTime.Now
            Console.WriteLine("Inicio: {0}", d1.ToString("HH:mm:ss.ff"))
            Console.WriteLine("final : {0}", d2.ToString("HH:mm:ss.ff"))
            Console.WriteLine("               {0}", (d2 - d1).TotalSeconds.ToString("0.00"))

            Console.WriteLine()
        Next


        Console.ReadLine()

    End Sub


    Private Sub WaitSeconds(ByVal nSecs As Double)
        ' Esperar los segundos indicados

        ' Crear la cadena para convertir en TimeSpan
        Dim s As String = "0.00:00:" & nSecs.ToString.Replace(",", ".")
        Dim ts As TimeSpan = TimeSpan.Parse(s)

        ' Añadirle la diferencia a la hora actual
        Dim t1 As DateTime = DateTime.Now.Add(ts)

        ' Esta asignación solo es necesaria 
        ' si la comprobación se hace al principio del bucle
        Dim t2 As DateTime = DateTime.Now

        ' Mientras no haya pasado el tiempo indicado
        Do While t2 < t1
            ' Un respiro para el sitema
            System.Windows.Forms.Application.DoEvents()
            ' Asignar la hora actual
            t2 = DateTime.Now
        Loop
    End Sub


End Module

 

Código para C Sharp (C#) El código para C# (Visual C# 2005 o superior)
class Program
{
    static void Main(string[] args)
    {
        DateTime d1, d2;

        double d;
        double[] segundos = { 1.5, 2.3, 1.25, 2.99 };


        for(int i = 0; i < segundos.Length; i++)
        {
            d = segundos[i];
            Console.WriteLine("Esperando... {0} segundos", d);
            d1 = DateTime.Now;
            WaitSeconds(d);
            d2 = DateTime.Now;
            Console.WriteLine("Inicio: {0}", d1.ToString("HH:mm:ss.ff"));
            Console.WriteLine("final : {0}", d2.ToString("HH:mm:ss.ff"));
            Console.WriteLine("               {0}", (d2 - d1).TotalSeconds.ToString("0.00"));

            Console.WriteLine();
        }


        Console.ReadLine();

    }


    private static void WaitSeconds(double nSecs)
    {
        // Esperar los segundos indicados

        // Crear la cadena para convertir en TimeSpan
        string s = "0.00:00:" + nSecs.ToString().Replace(",", ".");
        TimeSpan ts = TimeSpan.Parse(s);

        // Añadirle la diferencia a la hora actual
        DateTime t1 = DateTime.Now.Add(ts);

        // Esta asignación solo es necesaria
        // si la comprobación se hace al principio del bucle
        DateTime t2 = DateTime.Now;

        // Mientras no haya pasado el tiempo indicado
        while(t2 < t1)
        {
            // Un respiro para el sitema
            System.Windows.Forms.Application.DoEvents();
            // Asignar la hora actual
            t2 = DateTime.Now;
        }
    }
}

Espacios de nombres usados en el código de este artículo:

System.Windows.Forms (para el DoEvents)
 


Código de ejemplo (comprimido):

No hay nada que descargar... todo el código está en la página.


 


La fecha/hora en el servidor es: 21/11/2024 13:42:09

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024