Вопрос

Я не могу опубликовать код (проблемы с собственностью), но кто-нибудь знает, какие типы вещей могут вызвать следующую ошибку в C #.Он выдается VOIP-клиентом, который я написал (используя counterpath 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: 

Обновить:
Оказывается, одна из библиотек, которые мы использовали, отправляла событие, о котором мы не знали, и проблема была где-то там.Теперь исправлено.

Это было полезно?

Решение

Список некоторых возможностей:

  • Объект используется после того, как он был утилизирован.Это может часто происходить, если вы удаляете управляемый объект в финализаторе (вы не должны этого делать).
  • Неуправляемая реализация одного из объектов, которые вы используете, прослушивается, и это повредило кучу памяти процесса.С DirectX, GDI и другими часто такое случается.
  • Мэшалинг на границе управляемого и неуправляемого является некорректным.Убедитесь, что вы закрепили управляемый указатель, прежде чем использовать его в неуправляемой части кода.
  • Вы используете небезопасный блок и делаете с ним забавные вещи.

В вашем случае это может быть проблема с Windows Forms.Но проблема не в том, что это происходит, а скорее в том, что об этом сообщается некорректно;возможно, вы все еще сделали что-то не так.

Можете ли вы определить, какой элемент управления вызывает ошибку, используя HWND?Это всегда одно и то же?Этот элемент управления делает что-то забавное непосредственно перед сбоем приложения?Является ли неуправляемая часть элемента управления пользовательским окном или стандартным элементом управления?

Другие советы

Такого рода проблема может возникнуть, если вы вызываете неуправляемый код, напримербиблиотека DLL.Это может произойти, когда сортировка идет ужасно неправильно.

Можете ли вы сказать нам, вызываете ли вы неуправляемый код?Если да, то используете ли вы сортировку по умолчанию или более конкретные вещи?Судя по трассировке стека, используете ли вы небезопасный код, напримерУказатели и тому подобное?Это может быть вашей проблемой.

Вот более подробная трассировка стека.Мне кажется, это как-то связано с Системой.Windows.Form.dll

целевой сайт указан как {IntPtr DispatchMessageW(MSG ByRef)}
и в разделе модуль он имеет System.windows.forms.dll

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top