C#如何安全结束保存到文件的线程
我正在编写一个脚本,该脚本在应该保存的更改后自动保存3秒,并希望在再次发生更改时重置3秒计时器。我也使用线程,因为我不希望程序在磁盘忙时结巴C#如何安全结束保存到文件的线程,c#,multithreading,file,io,persistence,C#,Multithreading,File,Io,Persistence,我正在编写一个脚本,该脚本在应该保存的更改后自动保存3秒,并希望在再次发生更改时重置3秒计时器。我也使用线程,因为我不希望程序在磁盘忙时结巴 void SaveTimer() { Thread.Sleep(3000); //wait 3 seconds Save(); //writes binary file to disk } 在上面的代码中,线程以“StartTimer”开头。我可以杀死线程,并重新启动,每次有一个变化,但这可能会导致问题,如果线程是在中间保存到磁盘。我不
void SaveTimer()
{
Thread.Sleep(3000); //wait 3 seconds
Save(); //writes binary file to disk
}
在上面的代码中,线程以“StartTimer”开头。我可以杀死线程,并重新启动,每次有一个变化,但这可能会导致问题,如果线程是在中间保存到磁盘。我不确定如何安全地重置等待的时间。如果您有任何想法,我们将不胜感激。从您的问题和随后的评论中,我可以向您推荐两种选择,并附加一些“警告”:
从您的问题和随后的评论中,我可以向您建议两个选项,并附加一些“警告”:
void SaveTimer()
{
try
{
using (Stream stream = new FileStream(filename, FileMode.Open))
{
yourTimer.Stop();
Save();
yourTimer.Start();
}
}
catch { Thread.Sleep(3000); }
}
}
void SaveTimer()
{
try
{
using (Stream stream = new FileStream(filename, FileMode.Open))
{
yourTimer.Stop();
Save();
yourTimer.Start();
}
}
catch { Thread.Sleep(3000); }
}
}
根据数据的性质,您可能希望写入一个大的空文件,然后将其打开,以便在专用进程上进行读写 不需要重写文件,只需将需要更改的行传递给读/写线程即可
为了简单起见,文件应该足够大,不需要增长。通过这种方式,您已经创建了一个基本的数据库。根据数据的性质,您可能希望写入一个大的空文件,然后将其打开,以便在专用进程上进行读写 不需要重写文件,只需将需要更改的行传递给读/写线程即可
为了简单起见,文件应该足够大,不需要增长。这样,您就创建了一个基本的数据库。参见类似问题的答案参见类似问题的答案睡眠可以通过中断调用中断。睡眠可以通过中断调用中断。