Мое приложение имеет простую функцию, где он подключается к Excel и будет выполнять операции перетаскивания между ними. В частности, я просто беру некоторые текстовые значения из своего приложения, перетаскивая их в Excel и отбрасывая их.DragDrop.DoDragDrop не возвращается при выполнении операции пересылки в Excel
Это работает 90% времени, но, как ни странно, в определенное время мое приложение просто зависает. Я прикрепляю отладчик и приостанавливаю выполнение, и он застревает в DragDrop.DoDragDrop
- эта функция никогда не возвращается, и мое приложение будет вечно зависеть.
Есть ли способ обеспечить возврат DoDragDrop
? Или какой-то тайм-аут? Это случается только иногда, когда я бросаю данные в Excel, поэтому, насколько мне известно, капля завершается, и функция должна возвращаться в моем приложении.
Вот код, я использую:
DragDrop.DoDragDrop(sender as DependencyObject, draggable.GetDragDropString(), DragDropEffects.Copy);
GetDragDropString()
это просто функция, которая возвращает строку данных уронить в Excel. sender
- это только компонент пользовательского интерфейса, который я перетаскиваю. Как сетка или поле редактирования, текстовое поле и т. Д. Может быть любой из них.
Спасибо за помощь!
EDIT: В некоторых случаях возникает проблема с возвратом DragDrop.DoDragDrop
, возможно, кто-то может помочь с написанием правильного тайм-аута? Я пробовал запустить новый Thread
и иметь его тайм-аут, который работает в простых случаях и когда работа в потоке не требует ресурсов пользовательского интерфейса. Однако, когда я вызываю DoDragDrop
в новый поток с таймаутом, он выдает исключение, говорящий, что поток не может получить доступ к объекту, потому что ему принадлежит другой поток. Поэтому мне нужно вызвать эту функцию в том же потоке. Поэтому по существу мне нужен тайм-аут в потоке пользовательского интерфейса, когда эта функция не может вернуться за определенное время.
@HansPassant спасибо за ответ - Сопротивление всегда выполняется пользователем. Вы говорите, что мне нужно обрабатывать обратные вызовы Excel в моем коде приложения? Как вы назвали вызовы DragEnter/Over/Drop? Я просто предположил, что пользователь перетаскивает данные в сам Excel, после чего функция DoDragDrop вернется. Это работает в 90% случаев, но иногда оно зависает. – ryrich