如果在 WPF C# 中发生了某些更改,则每隔 1 分钟保存文件
本文关键字:保存文件 分钟 WPF 发生了 如果 | 更新日期: 2023-09-27 17:56:05
我有一个xml文件,我必须在wpf的richtextbox中加载它。 如果 txt 文件中发生一些更改,那么它将在 1 分钟的时间间隔后自动保存在不同的路径中。让第一次更改发生在 10:11 中,然后在 10:12 之前所做的所有更改都将保存。文件创建时间为 10:12,然后富文本框将在 10:50 再次修改,然后文件修改时间为 10:51。
private void startSaveTimer()
{
Timer saveTimer = new Timer(60000);
saveTimer.Elapsed += saveTimer_Elapsed;
saveTimer.Start();
}
private void saveTimer_Elapsed(object sender, ElapsedEventArgs e)
{
string filepath = @"C:'mydoc.txt";//file save path
if (File.Exists(filepath))
{
FileStream file = new FileStream(filepath, FileMode.Open);
//geting the content from file and compare with richtextbox data
//if not same then saving it again
}
else
{
//save file
}
}
private void richText_TextChanged(object sender, TextChangedEventArgs e)
{
startSaveTimer();
}
但是每个单曲中调用的这段代码都发生了变化,所以
FileStream file = new FileStream(filepath, FileMode.Open);显示不同用户使用的错误。尝试保持锁定仍然遇到相同的错误。
请参阅以下内容:
WPF 计时器,如 C# 计时器
这为您提供了一个触发存档的事件。 我想你也是在说你只想在发生变化时保存。 因此,您需要在用户进行更改时设置某种脏标志,以便计时器事件可以检查、保存和重置它。
更新:我想我现在更了解你的要求了。 由于您只想延迟保存(而不是每分钟保存一次),因此您可以执行以下操作:
private bool _isSaving = false;
private void richText_TextChanged(object sender, TextChangedEventArgs e)
{
delayedSaveAsync();
}
private async void delayedSaveAsync()
{
// if already waiting, get out
if (_isSaving) return;
_isSaving = true;
await Task.Delay(60000);
// save
_isSaving = false;
}
您需要跟踪是否已经在保存,或者每次击键都会生成另一个保存线程。