leonidasvijay Ответов: 1

Мое приложение получает разбился после того, как получаю исключение NullReferenceException при этом некоторые сосредоточиться связанные вещи


I am working on an application where we can open child modules using multiple tab display. But when someone switches between the tabs so frequently or clicks on a tab more than once then sometimes I got fatal nullreference exception which further crash my whole application. I have applied complete exception handling but this exception is not getting caught anywhere. I think this might be some windows related exceptions which are happening on the kernel. I am posting the call stack also and to get the info on the exception I used profiling tool.

System.NullReferenceException occurred Message: Exception thrown: 'System.NullReferenceException' in System.Windows.Forms.dll Additional information: Object reference not set to an instance of an object.

This call stack is above of the below call stack - this I got from the profiling tool.


> class= " система.Окна.Формы.UnsafeNativeMethods "method=" WaitMessage()"
классовая система.Окна.Формы.Application+ComponentManager "method=" System.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop (Система.IntPtr, int, int)"
классовая система.Окна.Формы.Application+ThreadContext "method=" RunMessageLoopInner(int, System.Окна.Формы.ApplicationContext)"
классовая система.Окна.Формы.Application+ThreadContext "method=" RunMessageLoop(int, System.Окна.Формы.ApplicationContext)"
классовая система.Окна.Формы.Приложение "method=" RunDialog(System.Окна.Форм.Форма)"
классовая система.Окна.Формы.Форма "method=" ShowDialog(System.Окна.Формы.IWin32Window)"
классовая система.Окна.Формы.Форма "метод=" ShowDialog()"
class= " OuterNamespace.Портал.Коммунальные услуги.Форм.MessageBoxEx" способ="показать(системный.Строка, Система.Строка, Система.Окна.Форм.MessageBoxButtons,Системы.Окна.Форм.MessageBoxIcon)"
class= " OuterNamespace.Портал.Коммунальные услуги.Форм.MessageBoxEx" способ="показать(системный.Строка, Система.Окна.Форм.MessageBoxButtons,Системы.Окна.Форм.MessageBoxIcon)"
class= " OuterNamespace.Портал.Компоненты.ExceptionHandler "method=" Handle(System.Исключение, Система.Строка, Внешнее Пространство Имен.Портал.Константы.Регистрация.LogType)"
class= " OuterNamespace.Портал.Компоненты.ExceptionHandler "method=" HandleException(System.Исключение, логическое значение, OuterNamespace.Межфазные границы.RuntimeInformation.IRuntimeInformationManager)"
class= " OuterNamespace.Исключение.Менеджер.ExceptionManager "method=" CallUnhandledExceptionHandler(System.Исключение)"
class= " OuterNamespace.Исключение.Менеджер.ExceptionManager "method=" HandleUnhandledException(System.Исключение)"
class= " OuterNamespace.Приложение.ApplicationContext "method=" Application_ThreadException(System.объектная система.Нарезание резьбы.ThreadExceptionEventArgs)"
классовая система.Окна.Формы.Application+ThreadContext "method=" OnThreadException(System.Исключение)"
классовая система.Окна.Формы.Control "method=" WndProcException(System.Исключение)"
классовая система.Окна.Формы.Control+ControlNativeWindow "method=" OnThreadException(System.Исключение)"
классовая система.Окна.Формы.NativeWindow "method=" Callback(System.IntPtr, int, System.IntPtr, Система.IntPtr)"
классовая система.Окна.Формы.UnsafeNativeMethods "method=" SetFocus(System. Runtime.InteropServices.HandleRef)"

------------------------------------------------------------------------
Система.Окна.Forms.dll!Система.Окна.Формы.ContainerControl.FocusActiveControlInternal () Неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.ContainerControl.WmSetFocus (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.ContainerControl.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.элемент управления UserControl.WmSetFocus (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.элемент управления UserControl.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.ControlNativeWindow.OnMessage (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.ControlNativeWindow.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
[Родной для управляемого перехода]
[Удалось перейти к родному переходу]
Система.Окна.Forms.dll!Система.Окна.Формы.ContainerControl.FocusActiveControlInternal () Неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.ContainerControl.WmSetFocus (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Форм.Форма.WndProc, который(система Реф.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.ControlNativeWindow.OnMessage (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.ControlNativeWindow.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.DefWndProc(ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Module.dll!Мое_пространство_имен.Обертки.Оконница.WndProc (ref System.Окна.Формы. сообщение м) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Родное окно.Обратный Вызов (System.IntPtr hWnd, int msg, System.IntPtr wparam, система.IntPtr lparam) Неизвестный
[Родной для управляемого перехода]
[Удалось перейти к родному переходу]
Module.dll!Мое_пространство_имен.Фокусконтроллер.FixMouseDoubleClickError.Анонимного Метода Anonymousmethod__68_0() Неизвестно
[Родной для управляемого перехода]
[Удалось перейти к родному переходу]
mscorlib.dll!Система.Делегат.DynamicInvokeImpl(object[] args) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbackDo (System.Окна.Формы.Контроль.Threadmethod (TME) неизвестен
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbackHelper(object obj) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallback(System.Окна.Формы.Контроль.Threadmethod (TME) неизвестен
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbacks() Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.MarshaledInvoke(Системы.Окна.Формы.Управляющий абонент, система.Метод делегата, object[] args, bool synchronous) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.Вызова(Системы.Делегировать метод, объект [] args) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.Вызова(Системы.Метод делегирования) Неизвестный
Module.dll!Мое_пространство_имен.Фокусконтроллер.FixMouseDoubleClickError () Неизвестно
Module.dll!Мое_пространство_имен.Фокусконтроллер.UpdateAsyncIff.Анонимного Метода Anonymousmethod__91_0() Неизвестно
[Родной для управляемого перехода]
[Удалось перейти к родному переходу]
mscorlib.dll!Система.Делегат.DynamicInvokeImpl(object[] args) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbackDo (System.Окна.Формы.Контроль.Threadmethod (TME) неизвестен
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbackHelper(object obj) Неизвестный
mscorlib.dll!Система.Нарезание резьбы.Параллельном режиме.RunInternal(Система.Нарезание резьбы.ExecutionContext executionContext, система.Нарезание резьбы.ContextCallback callback, состояние объекта, bool preserveSyncCtx) неизвестно
mscorlib.dll!Система.Нарезание резьбы.Параллельном режиме.Запустить(Система.Нарезание резьбы.ExecutionContext executionContext, система.Нарезание резьбы.ContextCallback callback, состояние объекта, bool preserveSyncCtx) неизвестно
mscorlib.dll!Система.Нарезание резьбы.Параллельном режиме.Запустить(Система.Нарезание резьбы.ExecutionContext executionContext, система.Нарезание резьбы.ContextCallback обратный вызов, состояние объекта) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallback(System.Окна.Формы.Контроль.Threadmethod (TME) неизвестен
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.InvokeMarshaledCallbacks() Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.MarshaledInvoke(Системы.Окна.Формы.Управляющий абонент, система.Метод делегата, object[] args, bool synchronous) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.Вызова(Системы.Делегировать метод, объект [] args) Неизвестный
Система.Окна.Forms.dll!Система.Окна.Формы.Контроль.Вызова(Системы.Метод делегирования) Неизвестный
Module.dll!Мое_пространство_имен.Фокусконтроллер.FixMouseDoubleClickError () Неизвестно
Module.dll!Мое_пространство_имен.Фокусконтроллер.HandleCpmModalForegroundWindow (System.IntPtr appForegroundWinHdl) неизвестно
Module.dll!Мое_пространство_имен.Фокусконтроллер.HandleForegroundWindowChange (System.IntPtr foregroundDetectedHdl) неизвестно
Module.dll!Мое_пространство_имен.Фокусконтроллер.ForegroundWindowChangeDetectorOnforegroundwindowchanged(объект отправителя, Мое_пространство_имен.Детектирование.ForegroundEventArgs foregroundEventArgs) неизвестно
Module.dll!Мое_пространство_имен.Детектирование.ForegroundWindowChangeDetector.OnForegroundWindowChanged(MyNamespace.Детектирование.ForegroundEventArgs e) неизвестно
Module.dll!Мое_пространство_имен.Детектирование.ForegroundWindowChangeDetector.ForegroundCallback (Система.IntPtr eventHook, uint eventType, System.Указателя IntPtr hwnd элемента, idObject инт, инт idChild, dwEventThread виде uint, uint с dwmsEventTime) неизвестный
[Родной для управляемого перехода]
[Удалось перейти к родному переходу]
Система.Окна.Forms.dll!Система.Окна.Формы.Приложение.ComponentManager.Система.Окна.Формы.Небезопасные методы.IMsoComponentManager.FPushMessageLoop (Система.IntPtr dwComponentID, int reason, int pvLoopData) неизвестно
Система.Окна.Forms.dll!Система.Окна.Формы.Приложение.ThreadContext.RunMessageLoopInner(инт причине системы.Окна.Формы.Контекст ApplicationContext) неизвестен
Система.Окна.Forms.dll!Система.Окна.Формы.Приложение.ThreadContext.RunMessageLoop(инт причине системы.Окна.Формы.Контекст ApplicationContext) неизвестен
Портал.Desktop.exe!Внешнее пространство.Портал.Рабочий стол.Program. Main () Неизвестно

Что я уже пробовал:

Я пока не могу добраться до этой проблемы, поэтому не могу найти обходной путь или какое-либо исправление для этого.

Richard MacCutchan

Вам нужно проследить назад до точки в вашем коде, которая вызвала исключение. Скорее всего, путем передачи нулевой ссылки в качестве параметра методу Windows.

1 Ответов

Рейтинг:
2

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень забавный вид, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего такого, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, на которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!


leonidasvijay

Я тоже отлаживал код с помощью visual studio, но когда когда-либо возникнет исключение, оно не остановится ни в какой момент. Я добавил Много обработки исключений с помощью универсального класса исключений, но мне все равно не повезло. И мое приложение состоит из более чем одного приложения. И я использую только библиотеку, где происходит это исключение. И более того, через инструмент профилирования я каким-то образом получил вышеприведенный stacktrace и обнаружил, что исключение наконец-то дошло до основного метода, и этот основной метод находится под контролем другого приложения, код которого мне недоступен.

OriginalGriff

Затем вам нужно начать с исходного кода для этого приложения или кода, который заставляет его работать. Если вы не видите, что он на самом деле делает или что вы передаете ему, вы не можете решить проблему ... трассировка стека ничего не говорит вам без соответствующего кода!