在我的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