我正在编写一个脚本,在应该保存的更改后自动保存3秒,如果发生其他更改,则希望3秒计时器重置。我也在使用线程,因为我不希望程序在磁盘忙等时口吃。
void SaveTimer()
{
Thread.Sleep(3000); //wait 3 seconds
Save(); //writes binary file to disk
}
在上面的代码中,一个帖子以“StartTimer”开头。我可以杀死线程并在每次更改时再次启动它,但如果线程正在保存到磁盘中,则可能会导致问题。我不确定如何安全地重置等待的时间。任何想法都将不胜感激,谢谢。
答案 0 :(得分:0)
从你的问题和随后的评论中我可以建议你两个选项,还有一些额外的“警告”:
然后,当您希望线程停止时,将标志设置为true,并在下次检查条件时停止。
答案 1 :(得分:0)
1)我建议您在尝试写入之前检查此文件是否已写入。
void SaveTimer()
{
try
{
using (Stream stream = new FileStream(filename, FileMode.Open))
{
yourTimer.Stop();
Save();
yourTimer.Start();
}
}
catch { Thread.Sleep(3000); }
}
}
答案 2 :(得分:0)
根据数据的性质,您可能需要编写一个大的空文件,然后将其保持打开状态以在专用进程上进行读写。
无需重写文件,只需将需要更改的行传递到读/写线程。
为简单起见,文件应足够大以至于不需要增长。通过这种方式,您已经创建了一个基本数据库。