DoDragDrop иногда замораживает приложение WinForms

Я делаю Спад Перетаскивания до внешнего приложения как это:

string[] files = new string[/* */];

// get files

DataObject o = new DataObject(DataFormats.FileDrop, files);
DoDragDrop(o, DragDropEffects.Copy | DragDropEffects.Move);

и некоторые приложения возьмут на себя файлы и переместятся для обработки их, и мое приложение является бесплатным сделать, это - материал, но некоторые приложения заставят МОЕ приложение заморозиться, пока это не обработает все файлы... там какой-либо способ, которым я могу обойти это? Я попытался сделать это в Потоке, но это не работало так хорошо - это не работало вообще... так, какие-либо предложения, как сделать этот код, не подвешивают мое приложение?

7
задан argh 28 January 2010 в 15:19
поделиться

1 ответ

.NET Control .Dodragdrop - это просто WAPPER вокруг API Win32 .. (ждать этого) .. Dodragdrop

Так что у него есть те же ограничения. Dodragdrop может быть вызван только из потока, которая называла только олейинициализация , что делает резьбную резьбу ATA (одну резьбовую квартиру).

Поскольку оно может использоваться только потоком STA, а дизайн API является синхронным, вы во власти по Mercy целевых приложений, обрабатывающих уведомления о падении. Это всего лишь часть дизайна OLE Drag и Drop и не может быть изменена. (OLE Drag и Drop был фактически разработан в дни Windows 3x, прежде чем потоки даже существуют в приложениях Windows).

Итак, вы могли бы , может быть, Сделать эту работу над другим потоком IFF, что нить является потоком STA. Возможно, вам также придется использовать взаимодействие, чтобы позвонить безразрешенному Dodragdrop функции.

3
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: