У меня есть PropertyGrid
в моем приложении, которое используется для редактирования произвольных объектов. Мне нужно иметь возможность запускать произвольную подпрограмму в другом потоке, который также просматривает эти объекты (функция поиска, если вам интересно). Очевидная проблема заключается в том, что пользователь может редактировать один из этих объектов в то время, когда мой поисковый поток читает его, чего было бы предпочтительнее избегать (хотя это, вероятно, не приведет ни к чему критичному, поскольку мой поисковый поток просто читает, не пишет).
Вызов lock(obj)
достаточно прост из моей ветки поиска, но после просмотра документации и беглого просмотра кода PropertyDescriptorGridEntry в Reflector я не могу найти аналогичное место для использования вызова System.Threading.Monitor.Enter()/Exit()
для рассматриваемого объекта в PropertyGrid. Я надеялся, что будут события BeginEdit и EndEdit, которые сделают это достаточно простым, но я не могу найти ничего подобного. Я бы предпочел не блокировать весь объект, пока он отображается в PropertyGrid, поскольку это, очевидно, заблокировало бы мой поток поиска, пока не будет выбран другой объект.
Я немного новичок в многопоточной модели Windows Forms, поэтому я надеюсь, что есть какой-то очевидный ответ, который я только что пропустил. Любая помощь?
Редактировать: Синхронное клонирование моих объектов перед запуском асинхронного поиска, вероятно, будет достаточно неэффективным, поэтому я мог бы также запустить сам поиск синхронно - смысл асинхронного запуска, конечно, в том, чтобы позволить моим пользователям продолжать работу. пока идет поиск. Поиск должен хорошо масштабироваться, так как набор данных, который я просматриваю, в конечном итоге окажется сколь угодно большим, из-за чего синхронное клонирование выглядит так, как будто оно вызовет проблему удобства использования, которую я пытаюсь избежать.