Tôi có một ứng dụng winforms, vấn đề phải làm với luồng. Vì tôi đang gọi 'MyCustomCode() tạo chuỗi mới và gọi phương thức ' SomeMethod() ', sau đó truy cập MessageBox.Show (...).Vấn đề luồng Winforms, chuỗi thứ hai không thể truy cập các điều khiển biểu mẫu chính thứ nhất
Sự cố phải làm với luồng, vì chuỗi mới được tạo đang cố truy cập điều khiển được tạo trên một chuỗi khác.
Tôi nhận được lỗi:
Cross-chủ đề hoạt động không hợp lệ: Control 'TestForm' truy cập từ một thread khác với thread nó đã được tạo ra về.
public TestForm()
{
InitializeComponent();
// custom code
//
MyCustomCode();
}
public void SomeMethod()
{
// ***** This causes an error ****
MessageBox.Show(this,
ex.Message,
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
private void InitializeAutoUpdater()
{
// Seperate thread is spun to keep polling for updates
ThreadStart ts = new ThreadStart(SomeMethod);
pollThread = new Thread(ts);
pollThread.Start();
}
Cập nhật
Nếu bạn nhìn vào ví dụ này http://www.codeproject.com/KB/cs/vanillaupdaterblock.aspx, phương pháp CheckAndUpdate đang kêu gọi MessageBox.Show (..) mà là vấn đề của tôi là gì. Tôi đã nghĩ rằng mã đó là tốt để đi!
Điều thú vị là mã này có hoạt động tốt vào thứ Sáu không ???
có thể là do tôi đã cài đặt .net 3.5? Đây có phải là tính năng 3.5 'không? Tôi nghi ngờ nó nhưng nó là lời giải thích duy nhất! –
(Gần đây tôi đã cài đặt nó ..) –