Solved

Run a process from a FileSystemWatcher only once     ...how?

Posted on 2004-04-23
4
662 Views
Last Modified: 2012-05-04
Hi,
I have a curious problem. I am using a WindowsService with a FileSystemWatcher component that does the following: as soon as I send a bmp image to folder A, the bmp image is converted to a gif image and saved in a folder B, from where the image is sent to a bluetooth device. The problem that I am encountering is that the process of sending the gif image is not executed only once...it keeps on running until I stop it. (i.e. the image is sent more than once). Why is that so? What can I do to make it run only once?
Below is what i've done:
_____________________________________________
 Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed

        Dim imgFile As System.Drawing.Image = System.Drawing.Image.FromFile("C:\FolderA\image.bmp")
        imgFile.Save("C:\FolderB\image.gif", System.Drawing.Imaging.ImageFormat.Gif)

        Process.Start("Folder B")                   'to open folder where there is the gif image

        SendKeys.SendWait(" ")                    
        SendKeys.SendWait("%fn")                    
        SendKeys.SendWait("{RIGHT}")
        SendKeys.SendWait("{ENTER}")
        SendKeys.SendWait("%fc")

'''''(I had to use SendKeys to send the image to a bluetooth device, because other
'''''methods, such as the Environment.SpecialFolder.SendTo...   , did not work)

        Application.Exit()                     'I tried this to exit process, but it did not work
        Application.ExitThread()           'this did not work either

    End Sub
___________________________________________________________________

How can I make the above process run only once and exit?
Thanks in advance for your help.
0
Comment
Question by:chspit
4 Comments
 
LVL 41

Expert Comment

by:graye
ID: 10904784
Yeah, I've had the same problems.... My solution (which is anything but elegant!) is to create a timestamp and check for repeat calls...

Here is a chunk of code from my OnChange event handler....

        Static LastRun As Date

            System.Threading.Thread.Sleep(1000)
            If DateDiff(DateInterval.Second, LastRun, Now) > 1 Then
                LastRun = Now
                ' do something
            Else
                ' only once please!
            Endif
0
 
LVL 5

Expert Comment

by:KeirGordon
ID: 10908221
It is a very easy solution.  The reason you are getting multiple events is because the filesystem watcher watches last access time, and everytime you touch the file it is cuasing another event to be thrown... simply put an if statement around your code to restrict event types.  You only want your code to run if e.ChangeType = IO.WatcherChangeTypes.Created .... but the way you have it written it will run no matter what change occurs.  Do it like I have below:

Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed

if e.ChangeType = IO.WatcherChangeTypes.Created then

     Dim imgFile As System.Drawing.Image = System.Drawing.Image.FromFile("C:\FolderA\image.bmp")
        imgFile.Save("C:\FolderB\image.gif", System.Drawing.Imaging.ImageFormat.Gif)

        Process.Start("Folder B")                   'to open folder where there is the gif image

        SendKeys.SendWait(" ")                    
        SendKeys.SendWait("%fn")                    
        SendKeys.SendWait("{RIGHT}")
        SendKeys.SendWait("{ENTER}")
        SendKeys.SendWait("%fc")

end if
end sub
0
 

Author Comment

by:chspit
ID: 10916920
Hi KeirGordon,
if i try as you said, nothing happens...the event is not raised.
When in the beginning I create the FileSystemWatcher I specify the NotifyFilter to LastAccess. so if I then add your line, still nothing happens when a new file is created.
0
 
LVL 5

Accepted Solution

by:
tgannetts earned 500 total points
ID: 10917401
The problem with the above is that you are trying to catch Created events in a Changed Event Handler. To catch the created events, use the Handles FileSystemWatcher1.Created handler instead. There should only be one Created event raised for each file deposited.

The problem comes if you are overwriting files. From your code it looks like the files are always called image.bmp. This does not generate a Created event, but instead a Changed event. You would therefore have to delete the file after you have generated the gif file to make sure each file dropped into the folder would generate a Created event in order to use this method.

Tom.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Get String split 5 46
Datagridview control last row back color red vb.net 4 36
Visual Studio .Net 2012 and Crystal Reports 9 45
Vb. Net application freezes 9 28
A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
Introduction As chip makers focus on adding processor cores over increasing clock speed, developers need to utilize the features of modern CPUs.  One of the ways we can do this is by implementing parallel algorithms in our software.   One recent…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
Concerto provides fully managed cloud services and the expertise to provide an easy and reliable route to the cloud. Our best-in-class solutions help you address the toughest IT challenges, find new efficiencies and deliver the best application expe…

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now