Gong-wpf-dragdrop: يؤدي سحب البيانات بين مثيلين من التطبيق إلى استثناء tymed غير صالح (استثناء من HRESULT: 0x80040069 (DV_E_TYMED))

تم إنشاؤها على ١٨ فبراير ٢٠١٣  ·  3تعليقات  ·  مصدر: punker76/gong-wpf-dragdrop

_المؤلف الأصلي: cheaster ... @ gmail.com (07 كانون الأول (ديسمبر) 2010 14:58:50) _

ما هي الخطوات التي سوف تتكاثر هذه المشكلة؟

  1. تطبيق IDragSource.
  2. بدء سحب البيانات (صف من wpf datagrid في حالتي)
  3. إضافة نسخة من البيانات المعرفة من قبل المستخدم إلى IDragInfo.Data الكائن في StartDrag.
  4. اسحب فوق نفس شبكة البيانات في المثيل الثاني للتطبيق.

ما هو الناتج المتوقع؟

سيكون الناتج المتوقع هو البيانات المستنسخة المضافة إلى شبكة البيانات. في أحداث DragOver و Drop ، سأتعامل مع أي مشكلات تتعلق بالبيانات. ومع ذلك ، لم أحصل على هذا الحد أبدًا لأن استثناء tymed غير صالح (استثناء من HRESULT: 0x80040069 (DV_E_TYMED)) يتم رفعه بواسطة O / S في السطر 135 في GongSolutions.Wpf.DragDrop.DropInfo.cs (الرمز هو البيانات = (e. Data.GetDataPresent (تنسيق البيانات))؟ e.Data.GetData (تنسيق البيانات): e.Data ؛).

ما هو إصدار المنتج الذي تستخدمه؟
0.1.3 (إصدار التجميع) - لقد بنيت من المصدر
ويندوز إكس بي

يرجى تقديم أي معلومات إضافية أدناه.

تتبع تفاصيل الاستثناء:

System.Runtime.InteropServices.COMException لم تتم معالجته بواسطة كود المستخدم
الرسالة = tymed غير صالح (استثناء من HRESULT: 0x80040069 (DV_E_TYMED))
المصدر = mscorlib
رمز الخطأ = -2147221399
تتبع المكدس:
في System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode، IntPtr errorInfo)
في System.Runtime.InteropServices.Marshal.ThrowExceptionForHR (رمز خطأ Int32)
في System.Windows.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData (FORMATETC & formatetc، STGMEDIUM & medium)
في System.Runtime.InteropServices.ComTypes.IDataObject.GetData (FORMATETC & format، STGMEDIUM & medium)
في System.Windows.DataObject.OleConverter.GetDataInner (FORMATETC & formatetc، STGMEDIUM & medium)
في System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL (تنسيق سلسلة ، جانب DVASPECT ، فهرس Int32)
في System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject (تنسيق سلسلة ، جانب DVASPECT ، فهرس Int32)
في System.Windows.DataObject.OleConverter.GetData (تنسيق سلسلة ، تحويل تلقائي منطقي ، جانب DVASPECT ، فهرس Int32)
في System.Windows.DataObject.OleConverter.GetData (تنسيق String ، Boolean autoConvert)
في System.Windows.DataObject.GetData (تنسيق String ، Boolean autoConvert)
في System.Windows.DataObject.GetData (تنسيق String)
في GongSolutions.Wpf.DragDrop.DropInfo..ctor (كائن المرسل ، DragEventArgs e ، DragInfo dragInfo)
في GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragOver (مرسل الكائن ، DragEventArgs e)
في GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragEnter (مرسل الكائن ، DragEventArgs e)
في System.Windows.DragEventArgs.InvokeEventHandler (المندوب genericHandler ، الكائن genericTarget)
في System.Windows.RoutedEventArgs.InvokeHandler (معالج التفويض ، هدف الكائن)
في System.Windows.RoutedEventHandlerInfo.InvokeHandler (هدف الهدف ، RoutedEventArgs routedEventArgs)
في System.Windows.EventRoute.InvokeHandlersImpl (Object source، RoutedEventArgs args، Boolean reRaised)
في System.Windows.UIElement.RaiseEventImpl (DependencyObject sender ، RoutedEventArgs args)
في System.Windows.UIElement.RaiseEvent (RoutedEventArgs e)
في System.Windows.OleDropTarget.RaiseDragEvent (RoutedEvent dragEvent ، Int32 dragDropKeyStates ، Int32 & Effects ، DependencyObject target ، Point targetPoint)
في System.Windows.OleDropTarget.MS.Win32.UnsafeNativeMethods.IOleDropTarget.OleDragOver (Int32 dragDropKeyStates ، Int64 point ، Int32 & effects)
استثناء داخلي:

_المشكلة الأصلية: http://code.google.com/p/gong-wpf-dragdrop/issues/detail؟

Bug Imported from google code

التعليق الأكثر فائدة

واجهت مشكلة استثناء DV_E_TYMED في تطبيق أقوم بتطويره وأود مشاركة الحل الذي وجدته. مرفق هنا يمكنك العثور على الملفات من مشروعك التي قمت بتعديلها لإصلاح المشكلة.
بشكل أساسي عند سحب الكائنات من تطبيق إلى آخر ، تحتاج إلى استخدام COM ويتطلب COM أن تكون الكائنات قابلة للتسلسل ليتم تبادلها بشكل صحيح.
عند استخدام DataObject ، لا يمكنك فقط تمرير DataFromat الذي قمت بإنشائه ، لأن COM لن يعرف أي شيء عنه. بدلاً من ذلك ، قمت بإنشاء فئة مجمعة (DragDropDataWrapper) تم وضع علامة عليها على أنها [Serializable] وتنفذ ISerializable. ثم في كل مرة أحتاج فيها إلى إنشاء DataObject أفعله: DataObject جديد (DragDropDataWrapper (data) جديد. في الجانب الخلفي ، يمكنني الآن استرداد بياناتي باستخدام DataFormat.Serializable ، والذي يمكن التعرف عليه بواسطة COM.
اضطررت إلى إصلاح أشياء ثانوية أخرى لجعل المثال يعمل ، أي إدارة الحالة عندما يكون DragInfo فارغًا.
إذا قمت بالتحقق من مثال BoundTree ، فيجب أن يعمل الآن عبر التطبيق.
CrossApplicationDragDropFix.zip

ال 3 كومينتر

_ From cheaster ... @ gmail.com في 7 كانون الأول (ديسمبر) 2010 15:25: 00_
مزيد من المعلومات ....

يبدو أن المشكلة الحقيقية هي عندما أقوم بتعيين IDragInfo.Data إلى كائن System.Windows.DataObject. أقوم بإرفاق نموذج تطبيق لعرض المشكلة.

لرؤية الخطأ ، قم بتنفيذ الخطوات التالية. قم بتشغيل مثيلين من التطبيق ، وحاول سحب عنصر من مربع القائمة بين المثلين.

السبب في أنني أستخدم DataObject هو أنني بحاجة للسماح بإسقاط الملفات إلى O / S أيضًا.

_ From fahad ... @ gmail.com on August 24، 2011 20:46:51 _
أضف صوتك هنا لهذه القضية
https://connect.microsoft.com/WPF/feedback/details/682826/comexception-of-type-dv-e-tymed-occurs-when-a-break-point-hit-as-a-result-of- سحب

واجهت مشكلة استثناء DV_E_TYMED في تطبيق أقوم بتطويره وأود مشاركة الحل الذي وجدته. مرفق هنا يمكنك العثور على الملفات من مشروعك التي قمت بتعديلها لإصلاح المشكلة.
بشكل أساسي عند سحب الكائنات من تطبيق إلى آخر ، تحتاج إلى استخدام COM ويتطلب COM أن تكون الكائنات قابلة للتسلسل ليتم تبادلها بشكل صحيح.
عند استخدام DataObject ، لا يمكنك فقط تمرير DataFromat الذي قمت بإنشائه ، لأن COM لن يعرف أي شيء عنه. بدلاً من ذلك ، قمت بإنشاء فئة مجمعة (DragDropDataWrapper) تم وضع علامة عليها على أنها [Serializable] وتنفذ ISerializable. ثم في كل مرة أحتاج فيها إلى إنشاء DataObject أفعله: DataObject جديد (DragDropDataWrapper (data) جديد. في الجانب الخلفي ، يمكنني الآن استرداد بياناتي باستخدام DataFormat.Serializable ، والذي يمكن التعرف عليه بواسطة COM.
اضطررت إلى إصلاح أشياء ثانوية أخرى لجعل المثال يعمل ، أي إدارة الحالة عندما يكون DragInfo فارغًا.
إذا قمت بالتحقق من مثال BoundTree ، فيجب أن يعمل الآن عبر التطبيق.
CrossApplicationDragDropFix.zip

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات