Очень простое решение для .NET 4.5.1 +:
<ComboBox SelectedItem="{Binding SelectedItem, Delay=10}" ItemsSource="{Binding Items}" />
Это работает для меня в большинстве случаев. Вы можете откатить выделение в выпадающем списке, просто запустите NotifyPropertyChanged без присвоения значения.
Если вам необходимо использовать необработанные указатели, лучше всего убедиться, что это действительный указатель или NULL. Затем вы можете проверить его действительность, проверив, равно ли оно NULL.
Но чтобы ответить на ваш вопрос, вы можете уловить подобные вещи с помощью структурированной обработки исключений (SEH) .
При этом SEH - плохая идея .
Выявление такого рода ошибок устраняет симптомы, а не основную причину.
Следующие идиомы будут работать на любой платформе:
инициализировать все указатели на ноль
, если вы не может гарантировать, что указатель действителен, проверьте, что он не равен 0, прежде чем косвенно указывать его
при удалении объектов, установите указатель на 0 после удаления
будьте осторожны с проблемами владения объектами при передаче указателей в другие функции
Существуют функции IsBadReadPtr
и [1145846Ptr] [1145846Pt]] это может делать то, что вы хотите. Также есть статья , в которой объясняется, почему вы не должны их использовать.
Вы, конечно, можете проверить, имеет ли указатель NULL!
if ( ptr == NULL ) {
// don't use it
}
Это единственный переносимый тест, который вы можете выполнить. Windows действительно предоставляет различные API-интерфейсы для тестирования указателей, но, как отмечали другие, их использование может быть проблематичным.
Я думаю, вы ищете что-то вроде IsBadReadPtr.
Документация:
http://msdn.microsoft.com/en-us/library/aa366713 (VS.85 ) .aspx
Я не знаю насчет Windows, но в * nix вы можете установить обработчик сигнала SIGSEGV для перехвата исключения.