web-dev-qa-db-fra.com

Exécute la fonction spécifiée toutes les X secondes

J'ai une application Windows Forms écrite en C #. La fonction suivante vérifie si l’imprimante est en ligne ou non:

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

et met à jour l'image si l'imprimante est hors ligne. Maintenant, comment puis-je exécuter cette fonction isonline() toutes les 2 secondes afin que, lorsque je débranche l'imprimante, l'image affichée sur le formulaire (pictureBox1) Se transforme en une autre sans relancer l'application ni vérification manuelle? (par exemple, en appuyant sur le bouton "Refresh" qui exécute la fonction isonline())

50
DevelRoot

Utilisez 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();
}

Vous pouvez appeler InitTimer() dans Form1_Load().

96
Stecya

La solution la plus conviviale pour les débutants est la suivante:

Faites glisser un minuteur de la boîte à outils, attribuez-lui un nom, définissez l'intervalle souhaité, puis définissez "Enabled" sur True. Ensuite, double-cliquez sur le minuteur et Visual Studio (ou celui que vous utilisez) écrira le code suivant:

private void wait_Tick(object sender, EventArgs e)
{
    refreshText(); // Add the method you want to call here.
}

Pas besoin de vous soucier de le coller dans le mauvais bloc de code ou quelque chose du genre.

6
philx_x

Vous pouvez le faire facilement en ajoutant un minuteur à votre formulaire (créé par le concepteur) et en configurant sa fonction Tick pour exécuter votre fonction isonline.

3
Alxandr