Как правило, вы можете сделать как следует
- В C # 2012 / Net 4.5 Создайте проект приложения Windows Forms под названием Lambda1
- В форму Form1, вставьте метку с названием label1
- Нажмите F4, чтобы открыть свойства Form1 (не свойства label1)
- Нажмите на вид событий (значок с громом)
- Двойной щелчок по событию закрытия формы. Обработчик событий будет создан.
- Пока не обращайте внимания на обработчик событий. Это будет заменено другим позже;
- Выбрать и стереть весь код в Form.cs (клавиша Ctrl-A / Удалить)
- Скопируйте и вставьте следующий код в 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;
}
}
}
Что делает этот код:
Таймер создан. Обработчик прошедших событий
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
будет вызываться каждые 1000 мс
Метка label1.Text будет обновлена внутри этого обработчика событий. Без Invoke будет выдана нить
Для обновления label1.Text новым значением использовался код
c = (Int32)(label1.Invoke(y = (x1, x2) => { label1.Text = (x1 +
x2).ToString(); x1++; return x1; }, c,d));
Обратите внимание, что c и d передаются в качестве аргумента x1 и x2 в функции Invoke, а x1 возвращается в вызове Invoke.
Переменная d была вставлена в этот код только для того, чтобы показать, как передать более одной переменной при вызове Invoke.