【发布时间】:2015-10-07 05:40:30
【问题描述】:
我正在尝试创建文件系统观察者的哈希表。这是为了保持活动文件系统观察者的运行记录,并将它们作为键观察的目录。然后通过表单,用户可以添加和删除要观看的文件夹,这些文件夹在列表视图或其他内容中可见。
我的主要问题是如何“保留”方法和类之间的哈希表。我对 C# 有点陌生,但它似乎不像我在 VB.NET 中习惯的那样工作。
所以我有(精简为简化):
public partial class MainForm : Form
{
public static Hashtable globalHashTable;
public MainForm()
{
InitializeComponent();
}
public void Button1Click(object sender, EventArgs e)
{
FileSystemWatcher watcher1 = new FileSystemWatcher(@"C:\");
globalHashTable.Add(@"C:\",watcher1);
}
}
}
这样一个文件系统观察器就会被添加到哈希表中。但是,由于 globalhashtable 是静态的(?),这将不起作用。使其非静态意味着我必须在按下按钮时创建它的一个实例,所以我每次都有一个新实例,因为它不是“保留”的。我的问题是如何在方法和类之间保持一个表在内存中。
我很确定我在很大程度上误解了一些东西,因为我对这一切都是新手。我也怀疑这是否是一个半体面的方法,如果有人有更好的方法,那么请继续!
谢谢,
马特
【问题讨论】:
-
“使它成为非静态意味着我必须在按下按钮时创建它的一个实例”,不,它只是意味着你必须创建它的一个实例一次,就像在你的构造函数中一样。我不确定你的意思是“课间”,你在哪里分享这个?您只需要创建一个可公开访问的属性,该属性返回您创建的实例,以便在其他活动类对象之间可用。此外,您应该查看
Dictionary<string, FileSystemWatcher>而不是哈希表以避免装箱。 -
我同意@RonBeyer 关于使用字典而不是哈希表的建议。还要注意具有大量子目录和文件的目录。 .NET Filewatchers 并不总是很好。
标签: c# static directory hashtable filesystemwatcher