[c#] Hoe gecontroleerd checken met FileSystemWatcher

Pagina: 1
Acties:

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 23-02 13:11
Doelstelling:
programma wat Mijn Afbeeldingen in de gaten houdt op nieuwe afbeeldingen die voldoen aan bepaalde eisen (vooral resolutie, dus een monitor resolutie)
en daarna een balloontip geeft met:
"Er is een nieuw wallpaper gevonden, klik hier om deze als achtergrond in te stellen"

manier:
Filesystemwatcher gebruiken en op het moment dat er een nieuwe file gemaakt word in mijn afbeeldingen kijken of deze aan de resolutie eisen voldoet, dan Balloontip geven

probleem:
de manier waarop ik dit wou gebruiken was door middel van een timer die elke 5 seconden even kijkt in de directory maar dit werkt niet omdat de filechange precies moet gebeuren op het moment dat de filesystemwatcher staat te kijken.
als ik de filesystemwatcher lang laat lopen (zeg 30 seconden) hangt in die tijd je programma.

weet iemand een manier om periodiek te scannen op bestanden zonder dat je programma vastloopt en dat je netjes events binnenkrijgt?

even wat voorbeeld code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private string MonitorDirectory()
        {
            string filename = "";
            Monitor.Path = @"C:\Documents and Settings\Whistler\Mijn documenten\Mijn afbeeldingen";
            Monitor.Filter = ".jpg";
            WaitForChangedResult result = new WaitForChangedResult();
            result = Monitor.WaitForChanged(WatcherChangeTypes.Created, 10000);

            if (result.TimedOut)
            {
                filename = result.TimedOut.ToString();
            }
            else
            {
                filename = result.Name.ToString();
            }
            return filename;


        }

Even niets...


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

threads om het kort te zeggen

ASSUME makes an ASS out of U and ME


  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 23-02 13:11
en dan die watcher gewoon laten gaan voor onbepaalde tijd?

Even niets...


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 11:25
Sterker nog, je kunt gewoon de events/delegates van dat geval gebruiken:

pseudo-code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
public void init()
{
  FileSystemWatcher watcher = new FileSystemWatcher()
  watcher.Path = @"C:\Documents and Settings\Whistler\Mijn documenten\Mijn afbeeldingen";
  watcher.Filter = ".jpg";
  watcher.Created += new FileSystemEventHandler(fileCreated);
}

public void fileCreated(Object sender, FileSystemEventArgs e)
{
  MessageBox.Show("Nieuwe file: " + e.FullPath);
}


Volgens mij moet je daar wel een eind mee komen, anders zou ik eens hier kijken

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Wat Flard zegt.
Die FileSystemWatcher loopt toch al in de background, en heeft events die geraised worden als er iets veranderd in directory.

https://fgheysels.github.io/


  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 23-02 13:11
Dit was wat ik zocht!
ik ga het proberen en kijk of het lukt
alvast bedankt !
goeie shit hier @ programming :D

Even niets...

Pagina: 1