quát, Bạn có thể làm như sau
- Trong C# 2012/Net 4.5 Tạo dự án Ứng dụng Biểu mẫu Windows có tên Lambda1
- Trong m1 Mẫu, chèn một Label gọi label1
- Nhấn F4 để mở các thuộc tính Form1 (không phải là thuộc tính label1)
- Bấm vào sự kiện xem (Biểu tượng với sấm sét)
- Double click vào sự kiện Mẫu Bế mạc. Trình xử lý sự kiện sẽ được tạo.
- Đừng bận tâm về trình xử lý sự kiện ngay bây giờ. Nó sẽ được thay thế bằng một cái khác sau đó;
- Chọn và xóa tất cả mã trong Form.cs (Phím Ctrl-A/Delete)
- Sao chép và dán mã sau vào 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;
}
}
}
gì mã này làm là:
Một giờ được tạo ra. Các gian đã qua Event Handler
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
sẽ được gọi mỗi 1000ms
các label1.Text sẽ được cập nhật trong xử lý sự kiện này. Nếu không có sự Invoke, sẽ có một sợi ban hành
Để cập nhật label1.Text với một giá trị mới, các mã được sử dụng
c = (Int32)(label1.Invoke(y = (x1, x2) => { label1.Text = (x1 +
x2).ToString(); x1++; return x1; }, c,d));
hãy thấy rằng c và d đang được được chuyển làm đối số cho x1 và x2 trong hàm Invoke và x1 được trả về trong lời gọi Invoke.
Biến d được chèn vào trong mã này chỉ để hiển thị cách chuyển nhiều hơn một biến khi Gọi được gọi.
Nguồn
2016-12-08 12:42:38