我正在尝试在Windows Mobile 6.1设备上运行一个应用程序(用c#编写),在后台(带有filesystemwatcher)在另一个应用程序后面运行。我编写了一个简单的filesystemwatcher,只要它当前的应用程序(换句话说只要你不打开其他程序)就可以很好地工作。即使在返回实例后,filesystemwatcher也不再起作用。它使用OpenNETCF,因为.net cf不包含文件系统观察程序。
任何人都知道为什么这不起作用?
任何帮助将不胜感激。
这是我的代码:
private void Form1_Load(object sender, EventArgs e)
{
OpenNETCF.IO.FileSystemWatcher f = new OpenNETCF.IO.FileSystemWatcher(@"c:\happydays", "*.*");
f.IncludeSubdirectories = true;
f.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
NotifyFilters.FileName | NotifyFilters.DirectoryName;
f.Created += new FileSystemEventHandler(File_Created);
f.EnableRaisingEvents = true;
}
private void File_Created(object sender, OpenNETCF.IO.FileSystemEventArgs e)
{
MessageBox.Show("File Created");
}
答案 0 :(得分:2)
我不确定你为什么会这样做,但我可能会猜测操作系统只将文件通知消息发送给活动应用程序。
SDF的FileSystemWatcher
依赖于应用程序消息泵来运行,因为它使用了引擎盖下的aygshell API,并且aygshell使用Windows消息进行调度(Microsoft的选择,而不是我的选择)。我出于几个原因不喜欢它,所以我写了一个名为FileSystemMonitor
的替代方案,你可以在同一个命名空间和DLL以及FileSystemWatcher
中找到它。 IIRC,它没有100%相同的工作,但考虑到我必须使用的文件系统API,我尽可能接近它。