Gong-wpf-dragdrop: Menyeret data antara dua contoh aplikasi menyebabkan pengecualian tymed tidak valid (Pengecualian dari HRESULT: 0x80040069 (DV_E_TYMED))

Dibuat pada 18 Feb 2013  ·  3Komentar  ·  Sumber: punker76/gong-wpf-dragdrop

_Penulis asli: cheaster ... @ gmail.com (07 Desember 2010 14:58:50) _

Langkah apa yang akan mereproduksi masalah?

  1. Terapkan IDragSource.
  2. Mulai seret data (baris dari wpf datagrid dalam kasus saya)
  3. Tambahkan klon data yang ditentukan pengguna ke objek IDragInfo.Data di StartDrag.
  4. Seret datagrid yang sama di contoh kedua aplikasi.

Apa keluaran yang diharapkan?

Keluaran yang diharapkan adalah data kloning yang ditambahkan ke datagrid. Dalam acara DragOver dan Drop saya akan menangani masalah data apa pun. Namun, saya tidak pernah sejauh itu karena pengecualian tymed tidak valid (Pengecualian dari HRESULT: 0x80040069 (DV_E_TYMED)) dimunculkan oleh O / S pada baris 135 di GongSolutions.Wpf.DragDrop.DropInfo.cs (kode adalah Data = (e. Data.GetDataPresent (dataFormat))? E.Data.GetData (dataFormat): e.Data;).

Versi produk apa yang Anda gunakan?
0.1.3 (Versi perakitan) - Saya membangun dari sumber
Windows XP

Berikan informasi tambahan di bawah.

Berikut detail pengecualian:

System.Runtime.InteropServices.COMException tidak ditangani oleh kode pengguna
Message = Invalid tymed (Pengecualian dari HRESULT: 0x80040069 (DV_E_TYMED))
Sumber = mscorlib
ErrorCode = -2147221399
StackTrace:
di System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo)
di System.Runtime.InteropServices.Marshal.ThrowExceptionForHR (Int32 errorCode)
di System.Windows.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData (FORMATETC & formatetc, STGMEDIUM & medium)
di System.Runtime.InteropServices.ComTypes.IDataObject.GetData (FORMATETC & format, STGMEDIUM & medium)
di System.Windows.DataObject.OleConverter.GetDataInner (FORMATETC & formatetc, STGMEDIUM & medium)
di System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL (Format string, aspek DVASPECT, indeks Int32)
di System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject (Format string, aspek DVASPECT, indeks Int32)
di System.Windows.DataObject.OleConverter.GetData (Format string, Boolean autoConvert, aspek DVASPECT, indeks Int32)
di System.Windows.DataObject.OleConverter.GetData (Format string, Boolean autoConvert)
di System.Windows.DataObject.GetData (Format string, Boolean autoConvert)
di System.Windows.DataObject.GetData (format String)
di GongSolutions.Wpf.DragDrop.DropInfo..ctor (Pengirim objek, DragEventArgs e, DragInfo dragInfo)
di GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragOver (Pengirim objek, DragEventArgs e)
di GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragEnter (Pengirim objek, DragEventArgs e)
di System.Windows.DragEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget)
di System.Windows.RoutedEventArgs.InvokeHandler (Delegate handler, Object target)
di System.Windows.RoutedEventHandlerInfo.InvokeHandler (Target objek, RoutedEventArgs routedEventArgs)
di System.Windows.EventRoute.InvokeHandlersImpl (Sumber objek, RoutedEventArgs args, Boolean reRaised)
di System.Windows.UIElement.RaiseEventImpl (pengirim DependencyObject, RoutedEventArgs args)
di System.Windows.UIElement.RaiseEvent (RoutedEventArgs e)
di System.Windows.OleDropTarget.RaiseDragEvent (RoutedEvent dragEvent, Int32 dragDropKeyStates, Int32 & efek, DependencyObject target, Point targetPoint)
di System.Windows.OleDropTarget.MS.Win32.UnsafeNativeMethods.IOleDropTarget.OleDragOver (Int32 dragDropKeyStates, titik Int64, Int32 & efek)
InnerException:

_Masalah asli: http://code.google.com/p/gong-wpf-dragdrop/issues/detail?id=29_

Bug Imported from google code

Komentar yang paling membantu

Saya menghadapi masalah pengecualian DV_E_TYMED di Aplikasi yang saya kembangkan dan saya ingin membagikan solusi yang saya temukan. Terlampir di sini Anda dapat menemukan file dari proyek Anda yang saya ubah untuk memperbaiki masalah.
Pada dasarnya saat menyeret objek dari satu Aplikasi ke aplikasi lainnya, Anda perlu menggunakan COM dan COM membutuhkan objek yang dapat diserialkan untuk dipertukarkan dengan benar.
Saat menggunakan DataObject Anda tidak bisa begitu saja melewatkan DataFromat yang Anda buat, karena COM tidak akan tahu apa-apa tentang itu. Saya malah membuat kelas pembungkus (DragDropDataWrapper) yang ditandai sebagai [Serializable] dan mengimplementasikan ISerializable. Kemudian setiap kali saya perlu membuat DataObject yang saya lakukan: DataObject baru (DragDropDataWrapper baru (data)). Di sisi drop saya sekarang dapat mengambil data saya menggunakan DataFormat.Serializable, yang dapat dikenali COM.
Saya harus memperbaiki hal-hal kecil lainnya untuk membuat contoh berfungsi, yaitu mengelola kasus saat DragInfo adalah null.
Jika Anda memeriksa contoh BoundTree, sekarang seharusnya berfungsi lintas aplikasi.
CrossApplicationDragDropFix.zip

Semua 3 komentar

_Dari cheaster ... @ gmail.com pada 07 Desember 2010 15: 25: 00_
Sedikit info lagi ....

Tampaknya masalah sebenarnya adalah ketika saya mengatur IDragInfo.Data ke objek System.Windows.DataObject. Saya melampirkan aplikasi sampel untuk mendemonstrasikan masalah.

Untuk melihat kesalahan tersebut, lakukan langkah-langkah berikut. Jalankan dua contoh aplikasi, coba seret item dari listbox antara dua contoh.

Alasan saya menggunakan DataObject adalah saya harus mengizinkan file-drop ke O / S juga.

_Dari fahad ... @ gmail.com pada 24 Agustus 2011 20: 46: 51_
Tambahkan suara Anda di sini untuk masalah ini
https://connect.microsoft.com/WPF/feedback/details/682826/comexception-of-type-dv-e-tymed-occurs-when-a-break-point-hit-as-a-result-of- seret

Saya menghadapi masalah pengecualian DV_E_TYMED di Aplikasi yang saya kembangkan dan saya ingin membagikan solusi yang saya temukan. Terlampir di sini Anda dapat menemukan file dari proyek Anda yang saya ubah untuk memperbaiki masalah.
Pada dasarnya saat menyeret objek dari satu Aplikasi ke aplikasi lainnya, Anda perlu menggunakan COM dan COM membutuhkan objek yang dapat diserialkan untuk dipertukarkan dengan benar.
Saat menggunakan DataObject Anda tidak bisa begitu saja melewatkan DataFromat yang Anda buat, karena COM tidak akan tahu apa-apa tentang itu. Saya malah membuat kelas pembungkus (DragDropDataWrapper) yang ditandai sebagai [Serializable] dan mengimplementasikan ISerializable. Kemudian setiap kali saya perlu membuat DataObject yang saya lakukan: DataObject baru (DragDropDataWrapper baru (data)). Di sisi drop saya sekarang dapat mengambil data saya menggunakan DataFormat.Serializable, yang dapat dikenali COM.
Saya harus memperbaiki hal-hal kecil lainnya untuk membuat contoh berfungsi, yaitu mengelola kasus saat DragInfo adalah null.
Jika Anda memeriksa contoh BoundTree, sekarang seharusnya berfungsi lintas aplikasi.
CrossApplicationDragDropFix.zip

Apakah halaman ini membantu?
0 / 5 - 0 peringkat