Tôi sử dụng một chuỗi viết trong một lớp khác để cập nhật nhãn. Nhãn là nội dung trong lớp Chính Winform.Cập nhật nhãn từ một chủ đề khác
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
Làm thế nào bạn có thể thấy, tôi chuyển tham chiếu nhãn vào hàm tạo của lớp thứ hai. Trong lớp thứ hai (Scanner) tôi đã một phương pháp gọi là "automaticScanner" mà nên cập nhật nhãn với mã này:
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
Tôi đã nhận lỗi này trên bản cập nhật của nhãn:
Hoạt động của chuỗi chéo không hợp lệ: Kiểm soát 'Chính' được truy cập từ một chuỗi khác với chuỗi được tạo trên
Tôi sử dụng .net 4 với Winform C#.
Cảm ơn rất nhiều câu trả lời.
Tin tức: Vấn đề là dòng này:
trd.Join();
Dòng này chặn GUI của tôi và lable không được cập nhật. Có các phương pháp để kiểm soát kết thúc của chuỗi và cập nhật nhãn cho đến khi kết thúc? Cảm ơn
nhưng ... cuộc gọi chính xác của nó thread trong chế độ này? Thread trd = new Thread (ThreadStart mới (scanner.scansioneAutomatica)); trd.IsBackground = true; trd.Start(); khi (! Trd.IsAlive); trd.Join(); Trong chế độ này, GUI bị chặn! : S – Antonio
Bao gồm bên trong lớp mã Action y; và chức năng để tham dự các sự kiện thời gian trôi qua tư nhân void T_Elapsed (đối tượng người gửi, System.Timers.ElapsedEventArgs e) { C++; // đại biểu là biểu thức "y =() => label1.Text = c.ToString()" label1.Invoke (y =() => label1.Văn bản = c.ToString()); } –