Settings.Default.Save () и Cursor.LoadFromStream приводят к System.IO.IOException - PullRequest
0 голосов
/ 26 сентября 2018

Два странных исключения произошли во встроенных компонентах .NET.

Это то же исключение ввода-вывода: «Процесс не может получить доступ к файлу« ...... », поскольку он используется другим процессом».

В случае «курсора» речь идет оФайл ".tmp" и исключение происходят где-то в конце последовательности вызовов, когда перефразируется сетка WPF:

System.Windows.Controls.Grid.MeasureCell
...
System.Windows.Controls.GridViewColumnHeader.GetCursor
...
System.Windows.Input.Cursor.LoadFromStream <-- here

В случае "настроек" речь идет о файле ".newcfg" и происходит именно в "вызов метода save.

Вопрос: как это возможно?И как справиться / предотвратить это?

Я думаю, реализации по умолчанию закрывают XMLWriters и делают все правильно.

1 Ответ

0 голосов
/ 16 апреля 2019

У нас был один пользователь с той же проблемой, что и в вашем случае с настройками (это примерно «.newcfg»).Оказывается, когда они отключили антивирус Norton, проблема исчезла!

Некоторые исследования, которые я провел до этого, могут быть полезны:

  • Проверьте, есть ли у вас большеодин поток способен вызывать Settings.Default.Save ().Если несколько потоков конкурируют, это может привести к этой ошибке, хотя я понимаю, что .NET должен сделать этот потокобезопасным.
  • Это может произойти, если у вас есть несколько вызовов Settings.Default.Save ()в быстрой последовательности, в том же потоке.Это может произойти, если несколько классов (например, пользовательские / пользовательские элементы управления) хотят сохранить некоторые настройки, но ни один из них не должен знать о необходимости других, и закрытие родительской формы заставляет каждый элемент управления вызывать Save ().
  • Убедитесь, что у пользователя есть соответствующие разрешения на запись в целевой папке И в папке, где находится .exe.Мой коллега видел странную связь между этими двумя!
  • Найдите все экземпляры в своем коде, где вы вызываете Settings.Default.Save (), и установите для них точку останова.Когда вы запускаете программу, вы можете заметить подозрительное поведение или паттерн в способе их вызова.

Надеюсь, это поможет!

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