Tôi có một ứng dụng winforms đơn giản, thực hiện quy trình chạy dài trên một luồng khác thông qua một nhiệm vụ TPL. Trong quá trình chạy dài này, tôi muốn cập nhật giao diện người dùng (thanh tiến trình hoặc thứ gì đó). Có cách nào để làm điều này mà không bị yêu cầu .ContinueWith()?Cách cập nhật giao diện người dùng từ các tác vụ con trong WinForms
public partial class Form1 : Form
{
private Task _childTask;
public Form1()
{
InitializeComponent();
Task.Factory.StartNew(() =>
{
// Do some work
Thread.Sleep(1000);
// Update the UI
_childTask.Start();
// Do more work
Thread.Sleep(1000);
});
_childTask = new Task((antecedent) =>
{
Thread.Sleep(2000);
textBox1.Text = "From child task";
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
Thực thi mã này tôi nhận được ngoại lệ phổ biến:
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.
Tôi nghĩ bạn phải dán tham chiếu hộp văn bản vào chuỗi. – jwillmer