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
リストの一部 (フィールドなど) を更新する1 つのスレッドとDevice.status
、これらのリストがDataGridView
テーブルにバインドされ、フィールドの一部 (Device.description
フィールドなど) を手動で編集できる UI スレッドがあります。
私の問題は、Timer スレッドが Binding リストのコンテンツを更新しようとすると、次のようになることですInvalidOperationException
。
Additional information: Cross-thread operation not valid: Control 'gridView1' accessed from a thread other than the thread it was created on.
lock(listLock)
リストを変更するすべてのコード ブロックでステートメントを使用していますが、リストの処理MyGlogals
方法を制御できませんDataGridView
。このアプリケーションをスレッドセーフにする方法は?