如果可能的话,我有兴趣在PCL核心中实现跨平台的filesystemwatcher。在mvvmcross的上下文中,您建议采用哪种一般方法?我的第一个想法是通过文件插件获取不同的设备文件系统,然后设置一个while
循环,但听起来非常低效:
while (!File.Exist)
{
Thread.sleep(1000);
}
//do stuff
由于 标记
答案 0 :(得分:0)
File.Exists的常见错误概念是检查文件是否存在....
它实际检查的是,您可以访问该文件。因此,如果文件位于共享上且您没有正确的权限,则可能返回false。
我想这可能因平台而异,所以要小心。
答案 1 :(得分:0)
根据您定位的平台,某些平台会支持文件观察者 - 例如Android有一个FileObserver
类(例如,见Using android.os.FileObserver to watch "\data" directory not working)
在没有本机文件系统观察程序的平台上,我想某种定时检查是你能做的最好的。一般来说,我建议使用某种Timer
而不是Thread.Sleep
- 主要是因为Timer
通常更有内存效率,但也因为Thread.Sleep
在PCL中不可用
对于iOS和WP这样的平台,它们对每个应用程序的文件系统访问进行沙盒化,那么我怀疑实际上不需要实现文件系统观察器 - 因为您的应用程序是唯一可以读取或写入应用程序文件系统的应用程序,那么你应该有一个更简单的方法来解决文件系统内容的变化。