Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#清除计时器中的richTextBox_C#_Timer_Save_Richtextbox - Fatal编程技术网

C#清除计时器中的richTextBox

C#清除计时器中的richTextBox,c#,timer,save,richtextbox,C#,Timer,Save,Richtextbox,我想保存richTextBox。当用户选中“保存”复选框时,每分钟保存一次文本 这里是复选框事件 num_saveTime是输入分钟数的numericUpDown控件 保存计时器是全局变量 private void chk_save_CheckedChanged(object sender, EventArgs e) { if (chk_save.Checked) { num_saveTime.Enabled = false; save_t

我想保存richTextBox。当用户选中“保存”复选框时,每分钟保存一次文本

这里是复选框事件

num_saveTime是输入分钟数的numericUpDown控件

保存计时器是全局变量

private void chk_save_CheckedChanged(object sender, EventArgs e)
{
    if (chk_save.Checked)
    {
          num_saveTime.Enabled = false;
          save_timer = new System.Timers.Timer();
          save_timer.Elapsed += new System.Timers.ElapsedEventHandler(save_timer_Elapsed);
          save_timer.Interval = 250;
          save_timer.Start();
     }
     else
     {
          num_saveTime.Enabled = true;
          save_timer.Stop();
     }
}
和计时器事件

delegate void TimerDelegate(object sender, System.Timers.ElapsedEventArgs e);
void save_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if (rtxb_PKT.InvokeRequired)
    {
         TimerDelegate tdel = new TimerDelegate(save_timer_Elapsed);
         rtxb_PKT.Invoke(tdel, new object[] { sender, e });
    }
    else
    {
         string now_ss = DateTime.Now.ToString("ss");
         if (now_ss.Equals("00"))
         {
             string now_mm = DateTime.Now.ToString("mm");
             string save_mm = Convert.ToInt32(num_saveTime.Value).ToString("D2");
             if (save_mm.Equals(now_mm))
             {
                 string path = Application.StartupPath + @"\" + DateTime.Now.ToString("yy-MM-dd--HH-mm-sss") + ".rtf";
                 rtxb_PKT.SaveFile(path, RichTextBoxStreamType.RichText);
                 rtxb_PKT.Clear(); //----here
              }
         }
     }
}
我想在保存后清除richTextBox

但我插入了.Clear()那个位置,它在保存之前清除了文本,所以文件是空的


保存后如何清除?

可能是您保存了两次?第一次一切正常时,再次清除并保存空rtxb。对于在UI线程上运行的任务,计时器滴答事件(间隔250ms)被触发的频率过高。想象你的文件将被保存四次!更糟糕的是,即使您将间隔设置为250ms,也不能保证在该秒{save_mm:00}内触发任何已用事件!UI线程在那一秒钟内可能很忙,因此您的保存逻辑可以推迟到下一个小时。您是对的。我增加了间隔,它保存得很好。。。。