Дерево интерфейса:
- список со списком инструментов апреля 2010 года listboxdragdroptarget
- шаблон элемента списка содержит элемент управления, имеющий пару кнопок
- рассматриваемый обработчик щелчка находится на одной из этих кнопок (и, следовательно, является частью фактического элемента списка в пользовательском интерфейсе, поэтому возможна операция перетаскивания)
- общий элемент списка должен быть в состоянии перетащить (переставить внутри списка или переместить в другой список), но цель состоит в том, чтобы обработчики щелчков на этих кнопках не вызывали перетаскивание
В настоящее время обработчик щелчков на одной из кнопок (см. Выше), по-видимому, занимает достаточно много времени (он выполняет множество обновлений для модели представления, которые вызывают различные другие изменения пользовательского интерфейса, поэтому он должен быть в потоке пользовательского интерфейса AFAICT) что это очень часто вызывает начало события перетаскивания.
Первая мысль о том, чтобы извлечь этот код из обработчика кликов, - это создать BackgroundWorker без DoWork и поместить все это в RunWorkerCompleted. Тем не менее, это похоже на злоупотребление BackgroundWorker и своего рода тяжеловес. Эффект, который я хочу, похож на PostThreadMessage в том же потоке (в потоке пользовательского интерфейса), но я не вижу ничего такого, что заставило меня сделать это быстро.
Я, конечно, мог бы поставить что-то в очередь с помощью пула потоков или даже с новым потоком, а затем заставить его перенаправить его обратно в поток пользовательского интерфейса, но опять же это выглядит как злоупотребление.