我正在创建一个应用程序来检查某个文件夹中是否有文件,如果存在,则会使应用程序最小化。
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”消息,如果我通过按钮按下它来调用此功能,我将无法获得“正常”或“最小化”但精细。不确定我这样做的方式是否存在固有的错误,或者我是否可以采取其他方式?
答案 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调试窗口。