定时器没有执行整个功能......?

时间:2014-03-18 01:17:19

标签: c# timer

我正在创建一个应用程序来检查某个文件夹中是否有文件,如果存在,则会使应用程序最小化。

System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(tick);
aTimer.Interval = updateIterval*1000;
aTimer.Enabled = true;

 public void tick(object source, ElapsedEventArgs e)
    {
        update();
    }
 public void update()
    {
        MessageBox.Show("Tick");
        if (WorkingFiles.Length != 0)
        {
            this.WindowState = FormWindowState.Normal;
            MessageBox.Show("Normal");
        }
        else
        {
            this.WindowState = FormWindowState.Minimized;
            MessageBox.Show("Minimized");
        }
    }

我每10秒钟才会收到“TICK”消息,如果我通过按钮按下它来调用此功能,我将无法获得“正常”或“最小化”精细。不确定我这样做的方式是否存在固有的错误,或者我是否可以采取其他方式?

3 个答案:

答案 0 :(得分:3)

您正尝试从后台线程访问UI线程。在您的实例中,我建议使用system.windows.forms.timer而不是System.Timers.Timer

答案 1 :(得分:2)

关于您想要实现的功能"我正在创建一个应用程序来检查某个文件夹中是否有文件" ,并且因为您已经要求其他方法来实现那。我建议你使用 FileSystemWatcher Class

  

"收听文件系统更改通知并在何时引发事件   目录或目录中的文件会发生变化。"

代码示例也从MSDN链接中提取并根据您的需要进行了修改:

FileSystemWatcher watcher;

public void StartWatch()
{
    // Create a new FileSystemWatcher and set its properties.
    watcher = new FileSystemWatcher();
    watcher.Path = "Path to directory"; // Put the path to your directory here
    // Watch for changes in LastWrite
    watcher.NotifyFilter = NotifyFilters.LastWrite;

    // Add event handlers.
    watcher.Created += new FileSystemEventHandler(OnCreated);

    // Begin watching.
    watcher.EnableRaisingEvents = true;

}

// Define the event handlers. 
private static void OnCreated(object source, FileSystemEventArgs e)
{
    MessageBox.Show("A File has been created");
}

答案 2 :(得分:0)

WorkingFiles很可能是空的问题(或其他一些不太明显的例外) - 添加try / catch并在发生异常时显示异常信息。

MessageBox.Show阻塞调用 - 所以函数的后半部分将不会运行,直到你“确定”对话框,因此它不是调试/跟踪的最佳方法。考虑使用Debug.Trace将消息输出到VS调试窗口。