Мы следим за развитием настроенного приложения (чей источник не находится под нашим контролем), которое записывает в манифест XML. Иногда приложение зависает из-за невозможности записи в файл манифеста. Хотя мы покрываем наши следы, явно закрывая дескриптор файла с помощью File.Close, а также создавая файловые переменные в Using Blocks. Но так или иначе это продолжает происходить. (Наше приложение является многопоточным, и к нему могут обращаться не более трех потоков.)
Другая интересная вещь заключается в том, что их приложение обновляет этот манифест при трех различных событиях (добавление элементов, удаление элементов, завершение элементов), но мы страдаем только из-за одного события (завершение элементов). Мой код указан здесь
using (var st = new FileStream(MenifestPath, FileMode.Open, FileAccess.Read))
{
using (TextReader r = new StreamReader(st))
{
var xml = r.ReadToEnd();
r.Close();
st.Close();
//................ Rest of our operations
}
}