【发布时间】:2013-09-16 13:13:45
【问题描述】:
我有 public static class MyGlobals 用于我的应用程序范围的变量以及多线程处理和更改这些变量。
public static class MyGlobals
{
public static BindingList<Device> devicesList;
public static BindingList<Device> availableList;
public static object listLock = new object();
}
我有一个 Timer 线程,它更新列表的一部分(例如 Device.status 字段)和 UI 线程,这些列表绑定到 DataGridView 表和一些字段(例如 Device.description 字段) 可以在那里手动编辑。
我的问题是当 Timer 线程想要更新绑定列表内容时,我得到InvalidOperationException:
Additional information: Cross-thread operation not valid: Control 'gridView1' accessed from a thread other than the thread it was created on.
我在修改MyGlogals 列表的每个代码块周围使用lock(listLock) 语句,但我无法控制DataGridView 如何处理列表。如何让这个应用线程安全?
【问题讨论】:
标签: c# multithreading winforms datagridview