2011-05-29 66 views
37

Tengo una aplicación de Windows Forms escrita en C#. Los siguientes controles de funcionamiento cada vez que la impresora está conectado o no:Ejecutar la función especificada cada X segundos

public void isonline() 
{ 
    PrinterSettings settings = new PrinterSettings(); 
    if (CheckPrinter(settings.PrinterName) == "offline") 
    { 
     pictureBox1.Image = pictureBox1.ErrorImage; 
    } 
} 

y actualiza la imagen si la impresora está fuera de línea. Ahora, ¿cómo puedo ejecutar esta función isonline() cada 2 segundos, así que cuando desenchufo la impresora, la imagen que se muestra en el formulario (pictureBox1) se convierte en otra sin reiniciar la aplicación ni realizar una comprobación manual? (por ejemplo, al presionar el botón "Actualizar" que ejecuta la función isonline())

+6

de votación no es una gran idea. Es mejor escuchar una notificación de cambio de estado si existe. –

+1

posible duplicado de [Ejecutar una operación cada x segundos por minuto en C#] (http://stackoverflow.com/questions/786672/execute-an-operation-every-x-seconds-for-y-minutes-in- c) –

Respuesta

78

Use System.Windows.Forms.Timer.

private Timer timer1; 
public void InitTimer() 
{ 
    timer1 = new Timer(); 
    timer1.Tick += new EventHandler(timer1_Tick); 
    timer1.Interval = 2000; // in miliseconds 
    timer1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    isonline(); 
} 

Puede llamar InitTimer() en Form1_Load().

+0

esto acaba de funcionar. Muchas gracias. – technology

+0

¿Esto se realizará automáticamente después del inicio de la aplicación? No funciona así para mí. ¿Puedes sugerir alguna solución? Gracias – user2886091

+0

@ user2886091: Siempre que el temporizador no se elimine o se detenga, debería funcionar – Stecya

3

Puede hacerlo fácilmente agregando un temporizador a su formulario (del diseñador) y configurando su función Tick para ejecutar su función isonline.

5

La solución más fácil para principiantes es:

Arrastre un temporizador de la caja de herramientas, darle un nombre, establecer su intervalo deseado y ajuste "Enabled" en True. No hay necesidad de preocuparse de pegarlo en el bloque de código incorrecto o algo así.

0

He subido un paquete Nuget que puede hacer que sea tan simple, se puede tener de aquí OpenJobScheduler

Y aquí cómo empezar a utilizarlo

using OpenJobScheduler; 

var jobScheduler = new JobScheduler(TimeSpan.FromMinutes(8), new Action(() => { 
    //What you want to execute 
})); 

jobScheduler.Start(); // To Start up the Scheduler 

jobScheduler.Stop(); // To Stop Scheduler from Running. 
+0

Hola, intente instalar el nuget, pero no está disponible para .NET 4.5.2, ¿para qué versión es? – avechuche

+1

Es compatible con .NET Standard 2.0 –

+1

@avechuche por lo que es compatible con .NET 4.6.1 y superior –

Cuestiones relacionadas