génériquement, vous pouvez faire comme suivre
- Dans C# 2012/Net 4.5 Créer un projet d'application Windows Forms appelé Lambda1
- Dans le m1 formulaire, insérez une étiquette appelée label1
- Appuyez sur F4 pour ouvrir les propriétés Form1 (pas les propriétés de LABEL1)
- Cliquez sur l'affichage Événements (icône avec un tonnerre)
- Double-cliquez sur l'événement de clôture du formulaire. Un gestionnaire d'événement sera créé. Cela ne vous dérange pas pour le gestionnaire d'événements pour l'instant. Il sera remplacé par un autre plus tard;
- Sélectionnez et effacez tout le code dans Form.cs (touche Ctrl-A/Suppr)
- Copiez et collez le code suivant dans Form1.cs;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace Lambda1
{
public partial class Form1 : Form
{
System.Timers.Timer t = new System.Timers.Timer(1000);
Int32 c = 0;
Int32 d = 0;
Func<Int32, Int32, Int32> y;
public Form1()
{
InitializeComponent();
t.Elapsed += t_Elapsed;
t.Enabled = true;
}
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
c = (Int32)(label1.Invoke(y = (x1, x2) =>
{ label1.Text = (x1 + x2).ToString();
x1++;
return x1; },
c,d));
d++;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
t.Enabled = false;
}
}
}
Qu'est-ce que ce code est faire:
Une minuterie est créé. Le gestionnaire d'événements Elapsed
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
sera appelé tous les 1000ms
Le Label1.Text sera mis à jour dans ce gestionnaire d'événements. Sans Invoke, il y aura un fil émis
Pour mettre à jour le Label1.Text avec une nouvelle valeur, le code a été utilisé
c = (Int32)(label1.Invoke(y = (x1, x2) => { label1.Text = (x1 +
x2).ToString(); x1++; return x1; }, c,d));
S'il vous plaît voir que c et d sont en cours passé en argument à x1 et x2 dans la fonction Invoke et x1 est renvoyé dans l'appel Invoke.
La variable d a été insérée dans ce code juste pour montrer comment passer plus d'une variable quand Invoke est appelée.