Wie erzwinge FileSystemWatcher zu warten, bis die Datei heruntergeladen wurde?

7

Ich lade eine Datei herunter und möchte die Installation erst ausführen, nachdem der Download abgeschlossen ist. Wie erreiche ich das? Scheint wie FileSystemWatcher onCreate -Ereignis würde dies tun, aber dies geschieht in einem anderen Thread, gibt es eine einfache Möglichkeit, den wartenden Teil im selben Thread zu erzwingen.

Code habe ich bisher

%Vor%

Ich habe SynchronizingObject und WaitForChangedResult angeschaut, aber kein funktionierendes Beispiel erhalten.

    
satyajit 08.03.2011, 20:25
quelle

4 Antworten

14

Versuchen Sie:

%Vor%     
ukhardy 08.03.2011 20:44
quelle
5

Wenn Sie darauf bestehen, FileSystemWatcher zu verwenden, müssten Sie wahrscheinlich die Tatsache berücksichtigen, dass eine Datei einer bestimmten Größe nicht in einem einzigen Vorgang erstellt (hochgeladen) wird. Das Dateisystem erzeugt wahrscheinlich 1 created und x changed Ereignisse, bevor die Datei verwendet werden kann.

Sie können die Ereignisse created abfangen und neue (dedizierte) Threads erstellen (es sei denn, Sie haben bereits einen laufenden Thread für diese Datei), in denen Sie eine Schleife erstellen und in regelmäßigen Abständen versuchen, die Datei exklusiv zu öffnen. Wenn Sie erfolgreich sind, ist die Datei bereit.

    
Simen S 08.03.2011 20:46
quelle
2

Eine Technik wäre das Herunterladen in das temporäre Verzeichnis und dann verschieben es in C: / Downloads, sobald es abgeschlossen ist.

    
C. Lawrence Wenham 08.03.2011 20:29
quelle
2

Wenn Sie WebClient zum Herunterladen verwenden, können Sie den DownloadFileCompleted eventhandler des Clients festlegen.
Wenn Sie dies auf diese Weise tun, können Sie auch client.DownloadFileAsync() verwenden, um es asynchron herunterzuladen.

    
Marcus 08.03.2011 20:32
quelle