1

我正在尝试让一个应用程序(用 c# 编写)在 Windows mobile 6.1 设备上运行,在另一个应用程序后面的后台(使用 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");
    }
4

1 回答 1

2

我不确定您为什么会出现这种行为,但我可以猜测操作系统仅将文件通知消息发送到活动应用程序。

SDFFileSystemWatcher依赖于应用程序消息泵来运行,因为它在底层使用aygshell API,而aygshell 使用Windows 消息进行调度(微软的选择,不是我的选择)。由于几个原因,我不喜欢这样,所以我写了一个替代方案FileSystemMonitor,你可以在同一个命名空间和 DLL 中找到它,以及FileSystemWatcher. IIRC,它的工作方式不是 100% 相同,但考虑到我必须使用的文件系统 API,我使它尽可能接近。

于 2012-12-21T00:13:45.270 回答