FileSystemWatcher不会在短时间内显示帧

时间:2018-01-13 05:41:41

标签: c# winforms picturebox

我使用pictureBox来显示jpg文件。我在文件夹中创建了新图片,我使用FileSystemWatcher来查看文件夹,当Created Event被引发时,我会显示图像流。

但是当引发Created事件时,我将pictureBox.Image属性更新为新的Stream,但它不会显示在pictureBox中。 //使用项目PicturesVideoGenerator

中的测试控制台程序

当我复制一个新的jpg文件并将其粘贴到该文件夹​​中时,它可以显示。

我有什么问题?

检查此处的代码:https://github.com/volnet/PicturesVideoPlayer/issues/1

1 个答案:

答案 0 :(得分:1)

创建文件时,它可能还没有内容,可能是0Kb文件。请记住,在创建文件时引发Created事件,而不是在文件包含某些数据时引发事件。

您需要挂钩Changed事件。检查上次Changed事件被触发的时间,如果上次更改之间存在很大差距,则假定该文件已完全写入。

你的案例:

Action                     | Event
1. Create a new file       | Created Event
2. Added some content      | Changed Event
3. Added some more content | Changed event

所以当2和3有5秒的间隙时,你假设用户已经完成了将文件写入磁盘。

DateTime dtLastWrite = DateTime.Now;
private static void OnChanged(object source, FileSystemEventArgs e)
{
   dtLastWrite = DateTime.Now();
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
   if (DateTime.Now.Subtract(dtLastWrite).TotalSeconds > 5)
      ReadTheFileNow(); //start to read the file now.
   else
      dtLastWrite = DateTime.Now;
}