2

我的应用程序成功检测到我想要检测的特定文件,但消息框总是显示不仅一次而且很多次我不知道出了什么问题。

附带的问题是这是始终检查某个文件是否存在的好方法吗?还是有更好更准确的方法?如果有任何建议或链接将有很大帮助。谢谢!

这是我的代码:

private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (File.Exists(patch_to_checked))
            {
                MessageBox.Show("File Found!");
                timer1.Stop();
            }
        }
4

3 回答 3

4

您应该在进入该功能后立即停止计时器。否则,当用户将光标移动到按钮以关闭消息框时,计时器正在计时:

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Stop();

        if (File.Exists(patch_to_checked))
        {
            MessageBox.Show("File Found!");
        }
        else
        {
            timer1.Start();
        }
    }
于 2012-11-17T12:23:15.957 回答
2

您需要在显示对话框之前停止计时器。

这样做的原因是,当对话框(模态)显示时,“定时器到达”(“Tick”)事件排队。然后,当对话框被关闭时,另一个这样的消息被传递到您的应用程序,导致代码再次执行,再次显示对话框。

您还可以通过以不阻塞导致显示消息的线程的方式显示消息来解决此问题,以便立即继续执行下一条语句。Tick但一般来说,如果您需要执行模态或长时间运行的操作,最好在处理事件时停止计时器。

于 2012-11-17T12:22:56.860 回答
1
private void timer1_Tick(object sender, EventArgs e)
{
     timer1.Stop();
     if (File.Exists(patch_to_checked))
     {
          MessageBox.Show("File Found!");
     }
    else
     {
        timer1.Start();
     }
}

重绘屏幕需要一些时间,由于计时器间隔短,它重绘但没有感觉

于 2012-11-17T12:21:41.077 回答