.NET Control.DoDragDrop - это просто оболочка вокруг API Win32, называемая .. (подождите) .. DoDragDrop
Так что у него те же ограничения. DoDragDrop может вызываться только из потока, который вызвал OleInitialize
, что делает поток потоком типа STA (Single Threaded Apartment).
Поскольку он может использоваться только потоком STA, а дизайн API является синхронным, вы находитесь в зависимости от того, как целевые приложения обрабатывают уведомления о отбрасывании. Это всего лишь часть дизайна OLE Drag and Drop, и его нельзя изменить. (OLE Drag and drop на самом деле был разработан в Windows 3x дней, еще до того, как потоки существовали в приложениях Windows).
Итак, вы могли бы возможно заставить это работать в другом потоке, если этот поток является потоком STA. Вам также, вероятно, придется использовать взаимодействие для вызова неуправляемой функции DoDragDrop
.