Я сталкиваюсь с очень странной проблемой в моем приложении C # 2.0 WinForms, и я даже не уверен, стоит ли спрашивать SO, потому что проблема возникает в странной установке, и я не думаю, что вы могли бы воспроизвести ее без моегоисточники, но у меня совершенно нет идей.
У меня есть форма с TreeView
слева и ListView
справа.TreeView
показывает все доступные файлы и подпапки из определенной папки (которая содержит документы, которые мне нужны для моего приложения).Если выбрана папка, ListView
показывает все файлы и подпапки из выбранной папки.При запуске я заполняю папку TreeView из папки и затем выбираю первый TreeNode
по коду (в моем случае это папка).После этого содержимое TreeView выглядит следующим образом:
-folder
-file1
-file2
Выбор папки запускает AfterSelecedEvent
из TreeView
.Поскольку папка была выбрана, я заполняю ListView
, используя следующий метод:
private void fillOverview(FAFolder folder)
{
lv_overview.Items.Clear();
ListViewItem item;
foreach (FAFile file in folder.sortedContent)
{
if (file is FAFolder)
{
item = new ListViewItem(file.Name, "Folder"); //exception got thrown here
}
else
{
item = new ListViewItem(file.Name, file.Name);
}
item.Tag = file;
lv_overview.Items.Add(item);
}
}
Как вы можете видеть, подпапка отсутствует, поэтому в этой настройке никогда не следует касаться строки item = new ListViewItem(file.Name, "Folder");
, но каждыйвремя от времени бросали NullReferenceException
.Если я заверну эту строку с помощью try / catch, исключение будет брошено в блок catch.Я пытался проверить все, если это null
или нет, но там не было нулевых ссылок.Или, если я добавлю MessageBox
прямо перед этой строкой, исключения все равно будут выброшены, и MessageBox
не появится.Это приводит меня к выводу, что трассировка стека выполнения неверна и / или это исключение происходит от другого Thread
или чего-то в этом роде.
Я очень оптимистичный человек и знаю, насколько умным является сообщество SOможет быть, но я не думаю, что кто-то может указать, в чем проблема.Так что я на самом деле ищу подсказки и советы, как я могу найти и устранить причину этого странного поведения.
РЕДАКТИРОВАТЬ:
internal abstract class FAFile
{
internal string Name;
internal readonly FAFolder Parent;
internal FAFile(FAFolder parent)
{
this.Parent = parent;
}
}
internal sealed class FAFolder : FAFile
{
internal readonly IDictionary<string, FAFile> Content = new Dictionary<string, FAFile>();
internal FAFolder(FAFolder parent, string name) : base(parent)
{
this.Name = name;
}
}
internal sealed class FADocument : FAFile
{
public readonly string Path;
public FADocument(FAFolder parent, string path): base(parent)
{
this.Path = path;
this.Name = System.IO.Path.GetFileNameWithoutExtension(path);
}
}