«Ссылка на объект не установлена ​​...», когда управление перерисовкой может быть связано с разрешениями на машине? - PullRequest
0 голосов
/ 13 ноября 2010

Я получаю следующее исключение при перерисовке моего элемента управления DataGridView:

Необработанное исключение: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

  • Источник: System.Windows.Forms

  • Стек: w System.Windows.Forms.DataGridView.PaintRows (Графика g, Rectangle boundingRect, Прямоугольник clipRect, Логическое значение singleHorizontBorderAdded) w System.Windows.Forms.DataGridView.PaintGrid (Графика g, прямоугольник gridBounds, прямоугольник clipRect, логическое значение singleVerticalBorderAdded, логическое значение singleHorizontBorderAdded) w System.Windows.Forms.DataGridView.OnPaint (PaintEventArgs e) w System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs e, слой Int16, логическое значение disposeEventArgs) w System.Windows.Forms.Control.WmPaint (Сообщение & m) w System.Windows.Forms.Control.WndProc (Сообщение & m) w System.Windows.Forms.DataGridView.WndProc (Message & m) w System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) w System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) w System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Что в основном говорит, что

Ссылка на объект не установлена ​​для экземпляра объекта.

Странная вещь в том, что это как-то связано с разрешениями пользователя домена, потому что на моей привилегированной учетной записи (не Администратор, просто больше привилегированных настроек) она работает, а на «обычной» учетной записи пользователя происходит сбой каждый раз. Я не знаю разницу между этими учетными записями, они не были настроены мной, и я не могу получить доступ к конфигурации AD. Другое дело, что версии / обновления .NET Framework на обеих машинах одинаковы.

Возможно ли установить какое-то ограничение на количество потоков в приложении на пользователя?

Любые советы, которые я могу проверить, приветствуются.

1 Ответ

0 голосов
/ 13 ноября 2010

В вашем стеке вызовов нет доказательств того, что этот код работает в потоке пользовательского интерфейса.Нет признаков Application.Run ().Это вредно для здоровья, DataGridView не является потокобезопасным элементом управления.Ни один из них не является.Такой код может работать со сбоями очень непредсказуемым образом, исключение NullReferenceException, безусловно, возможно.

Просмотрите свой код для любого места, где вы могли запустить рабочий поток и либо обновляли свойства DGV напрямую.Или, чаще, обновление данных, связанных с DGV.Вам нужно будет отменить привязку, чтобы предотвратить запуск обновления DGV в рабочем потоке, повторно выполнить привязку в потоке пользовательского интерфейса.Используйте BackgroundWorker, чтобы сделать это проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...