2017-01-19 3 views
2

Мой Winform приложение регистрирует AppDomain.CurrentDomain.UnhandledException и Application.ThreadException на корневом уровне, и я получил это исключение:Самопроизвольное InvalidOperationException на DataGridView

System.InvalidOperationException: Операция недопустима из-за текущего состояния объекта , в System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessListChanged (ListChangedEventArgs e) в System.Windows.Forms.DataGridView.DataGridViewDataConnection.currencyManager_ListChanged (отправитель объекта, ListChangedEventArgs e) в System.Windows.Forms.CurrencyManager.OnListChanged (ListChangedEventArgs e) на System.Windows.Forms.CurrencyManager.List_ListChanged (отправитель объекта, ListChangedEventArgs e) в System.ComponentModel.BindingList 1.OnListChanged(ListChangedEventArgs e) at System.ComponentModel.BindingList 1.FireListChanged (тип ListChangedType, индекс Int32) в System.ComponentModel.BindingList 1.InsertItem(Int32 index, T item) at System.Collections.ObjectModel.Collection 1.Add (T item) в системе. ComponentModel.BindingList 1.AddNewCore() at System.ComponentModel.BindingList 1.System.ComponentModel.IBindingList.AddNew() в System.Windows.Forms.CurrencyManager.AddNew() в System.Windows.Forms.DataGridView.DataGridViewDataConnection.AddNew() в System.Windows.Forms.DataGridView. DataGridViewDataConnection.OnNewRowNeeded() в System.Windows.Forms.DataGridView.OnRowEnter (DataGridViewCell & DataGridViewCell, Int32 ColumnIndex, Int32 RowIndex, булева canCreateNewRow, булева validationFailureOccurred) при System.Windows.Forms.DataGridView.SetCurrentCellAddressCore (Int32 ColumnIndex, Int32 RowIndex, булева setAnchorCellAddress, булева validateCurrentCell, булева throughMouseClick) при System.Windows.Forms.DataGridView. ProcessDownKeyInternal (Keys keyData, Boolean & перемещен) в System.Windows.Forms.DataGridView.ProcessEnterKey (Keys keyData) в System.Windows.Forms.DataGridView.ProcessDialogKey (Keys keyData) в System.Windows.Forms.Control.ProcessDialogKey (Keys keyData) в System.Windows.Forms.TextBoxBase.ProcessDialogKey (Keys keyData) в System.Windows.Forms.Control.PreProcessMessage (сообщение & msg) в System.Windows.Forms.Control.PreProcessControlMessageInternal (контрольный объект, сообщение & сообщений) в системе .Windows.Forms.Application.ThreadContext.PreTransla teMessage (MSG & тзд)

Это результат ex.ToString(), и он не возвращает пользовательский код моего приложения, только внутренние System.Windows.Forms методы.

Исключение время от времени возникает на некоторых машинах клиента, я даже не могу воспроизвести его сам.

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

Любой ключ, чтобы найти основную причину или отладить это?

Большое спасибо

+0

Уверенный, что это не указывает на ваш код, но он указывает на 'System.Windows.Forms.DataGridView', который может привести вас к тому, что ваш DataGridView должен иметь некоторые недопустимые данные. – Bauss

+0

_When_ является исключением? У вас должна быть информация от вашего клиента. Тем не менее, я уверен, что это связано и может быть полезно: http: // stackoverflow.com/questions/2359124/datagridview-throwing-invalidoperationexception-operation-is-not-valid-whe –

+0

Право связано с моими данными datagridview, но очень сложно найти, поскольку исключение ничего не показывает из моего кода ... Я уже добавил try/catch all во время моего обновления, но он ничего не ловит ... – Chris

ответ

1

Если вы исследуете трассировки стека, вы увидите корень проблемы: клиент пытается добавить новую запись на сетке, так что обработчик событий пытается добавить запись в datasource, которые приводят к другому обработчику событий, который пытается добавить запись в список привязки, что приводит к возбуждению события currencyManager_listChanged, которое не выполняется из-за неправильного состояния объекта.

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

Смежные вопросы