使用 Red-Gate 工具,我们检测到 System.Windows.DataObject 持有一个对拖动对象(一个框架元素)的引用,该对象在操作完成后很长时间就一直存在。
一旦 DragDrop.DoDragDrop,如何“清除”拖动对象?有没有办法通过这个传递一个空值并让它直接通过?
最佳答案
我自己刚刚发现了这个 gem,我的解决方案是对被拖动的数据项使用 WeakReference。
DataObject data = new DataObject(new WeakReference(this.draggedData));
DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move);
然后在下降
var draggedItem = e.Data.GetData(this.format.Name) as WeakReference;
if (draggedItem != null && draggedItem.IsAlive)
{
....
}
关于拖放导致的 WPF 内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10645946/