Jest kilka rozwiązań - na przykład stworzenie wątku, który co kilka sekund sprawdza, czy pliki w folderze różnią się od plików, które posiadamy na liście, albo - lepszy - użycie klasy System.IO.FileSystemWatcher, która jest stworzona do obserwowania co się dzieje w danym folderze. Pewnie jest też coś w WinAPI, ale nie zagłębiam się w to zanadto. Jak użyć tej klasy? Tworzymy konstruktor z folderem, który obserwujemy, jako parametrem, przypisujemy zdarzenie co się dzieje, gdy coś się zmieni i używamy albo asynchronicznych metod, albo synchronicznych z użyciem wątków. Ja, dla przykładu, napisałem to tak:
public Form1()
{
InitializeComponent();
FileSystemWatcher FSW = new FileSystemWatcher(Application.StartupPath);
FSW.Created += new FileSystemEventHandler(FSW_Created);
Thread thr = new Thread(new ThreadStart(new Action(delegate() {
while (true)
FSW.WaitForChanged(WatcherChangeTypes.All);
})));
thr.Start();
}
void FSW_Created(object sender, FileSystemEventArgs e)
{
FileInfo FI = new FileInfo(e.FullPath);
MessageBox.Show(string.Format("Dodano nowy plik: {0} ({1} kB)", FI.Name, FI.Length / 1024));
}
Metoda WaitForChanged oczekuje na określoną zmianę w folderze, w tym przypadku - na jakąkolwiek. Jesteśmy o tej zmianie poinformowani w zdarzeniu Created, które jest poniżej, i z parametru możemy odczytać conieco o pliku, resztę możemy sami uzyskać. Na końcu działania programu należy jednak wyłączyć wątek thr, inaczej proces aplikacji się nie zamknie (pomimo, że okna już nie będzie).