我使用pictureBox来显示jpg文件。我在文件夹中创建了新图片,我使用FileSystemWatcher来查看文件夹,当Created Event被引发时,我会显示图像流。
但是当引发Created事件时,我将pictureBox.Image属性更新为新的Stream,但它不会显示在pictureBox中。 //使用项目PicturesVideoGenerator
中的测试控制台程序当我复制一个新的jpg文件并将其粘贴到该文件夹中时,它可以显示。
我有什么问题?
检查此处的代码:https://github.com/volnet/PicturesVideoPlayer/issues/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;
}