Вы не указали, какую платформу вы используете, поэтому я предполагаю, что, какой бы платформой она ни была, она следует общим правилам, согласно которым только поток пользовательского интерфейса может получить доступ к элементам управления пользовательского интерфейса.С этим правилом у вас есть очевидное следствие того, что другие потоки не могут читать состояние флажка напрямую.
Решение состоит в следующем:
- Создайте несколько частных логических полейсоответствующие флажкам в объекте, представляющем диалоговое окно.
- Всякий раз, когда пользователь изменяет флажок, обновляйте соответствующее логическое поле.
- Предоставляйте эти поля как свойства только для чтения для другихпотоки для чтения.
- (необязательно) Защитите весь доступ к логическим полям с помощью мьютекса.
Элемент 4 является необязательным, поскольку на всех известных мне архитектурах опасность разрыва не возникаетдоступ к логическому полю.
Весь смысл этого состоит в том, чтобы избежать проблемы, заключающейся в том, что чтение и запись состояния управления пользовательским интерфейсом не являются поточно-ориентированными.Но в общем дизайне, который вы описываете, вы никогда не будете свободны от гонки данных.Когда ваш рабочий поток читает состояние, пользователь, возможно, только что изменил его или может изменить его.Вы не можете знать, и как только вы позволите рабочему потоку работать параллельно с потоком пользовательского интерфейса, вы должны принять этот факт.