سؤال

أنا غير قادر على إضافة رمز (الملكية المسائل) ولكن لا أحد يعرف ما هي أنواع الأشياء التي من شأنها أن تسبب الخطأ التالية في C#.أنه يتم حاليا طرح من قبل العميل عبر بروتوكول الإنترنت التي كتبتها (باستخدام عداد api) عند المكالمة انتهت قبل عميل آخر.الخطأ هو:

System.AccessViolationException was unhandled
  Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
  Source="System.Windows.Forms"
  StackTrace:
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at CollabAnalysisSF.Edge.GUI.Forms.Program.Main() in d:\data\beyerss\Desktop\client\GUI\ARGui\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

تحديث:
تبين أن واحدة من المكتبات كنا باستخدام كان يرسل خارج الحدث الذي لم نكن نعرف عنه و المشكلة كانت في مكان ما هناك.ثابت الآن.

هل كانت مفيدة؟

المحلول

قائمة بعض الاحتمالات:

  • كائن يستخدم بعد أن تم التخلص منها.هذا يمكن أن يحدث الكثير إذا لم يتم التخلص تمكن الكائن في finalizer (يجب أن لا تفعل ذلك).
  • وهو unmannaged تنفيذ واحدة من الكائن الذي تستخدمه أجهزة تنصت و تلف عملية كومة الذاكرة.يحدث كثيرا مع DirectX, GDI و بائعين آخرين.
  • Mashaling على إدارتها-غير المدارة الحدود معيبة.تأكد من تثبيت تمكن المؤشر قبل استخدامه على غير مدارة جزء من التعليمات البرمجية.
  • كنت تستخدم كتلة غير آمنة و تفعل أشياء مضحكة مع ذلك.

في هذه الحالة يمكن أن يكون مشكلة مع ويندوز الأشكال.ولكن المشكلة ليست أن يحدث ، بل أنه لا يتم الإبلاغ عنها بشكل صحيح ؛ أنت من المحتمل أن تكون قد فعلت شيئا خاطئا.

هل أنت قادرة على التحكم في تحديد ما هو الذي يسبب الخطأ باستخدام HWND?هو دائما نفس الشيء ؟ هذا التحكم فعل شيء مضحك قبل التطبيق تعطل ؟ هو unmannaged جزء من التحكم في نافذة مخصصة أو معيار السيطرة ؟

نصائح أخرى

هذا النوع من prolem يمكن أن يحدث إذا كنت استدعاء التعليمات البرمجية غير المدارة مثلdll.فإنه يمكن أن يحدث عندما حشد يذهب على نحو خاطئ.

هل يمكنك أن تخبرنا إذا كنت استدعاء التعليمات البرمجية غير المدارة?إذا كنت تستخدم الافتراضي تنظيم معين أو أكثر الاشياء ؟ يبدو من تتبع المكدس يمكنك استخدام تعليمات برمجية غير آمنة مثلالمؤشرات ؟ هذا يمكن أن يكون مشكلة.

هنا هو أكثر تفصيلا stacktrace.يبدو لي أنها قد تفعل شيئا مع System.Windows.Form.dll

على TargetSite هو سرد {IntPtr DispatchMessageW(MSG ByRef)}
و في إطار وحدة لديها System.windows.forms.dll

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top