在我的C#2.0 WinForms應用程序中遇到了一個非常奇怪的問題,我甚至不確定它是否值得提問,因爲問題發生在一個奇怪的設置中,我不認爲你可以在沒有我的來源的情況下複製它,但我完全沒有想法。無法捕捉的異常來自無法訪問的代碼
我有一張表格,左側爲TreeView
,右側爲ListView
。 TreeView
顯示來自特定文件夾(包含我需要的文檔)的所有可用文件和子文件夾。如果選擇了文件夾,則ListView
將顯示所選文件夾中的所有文件和子文件夾。在啓動時,我填充TreeView表單文件夾,之後我通過代碼選擇第一個TreeNode
(在我的情況下它是一個文件夾)。此後,TreeView控件的內容是這樣的:
-folder
-file1
-file2
選擇文件夾觸發TreeView
的AfterSelecedEvent
。因爲一個文件夾被選中我使用以下梅索德填充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
或不,但它不是nullreferences。或者,如果我在該行之前添加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);
}
}
如果我們能看到FAFolder和FAFile的代碼會容易得多 – pdr 2010-02-18 13:03:15
發佈堆棧跟蹤也會很有用 – Paolo 2010-02-18 13:24:49
您是否檢查過folder.sortedContent的結果以確保您獲得了期望的結果? – 2010-02-18 13:25:15