如果在 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# 中发生了某些更改,则每隔 1 分钟保存文件

请参阅以下内容:

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;
}

您需要跟踪是否已经在保存,或者每次击键都会生成另一个保存线程。