c# - using FileSystemWatcher to fire event, then delete the newly created file? -
i have windows service using filesystemwatcher monitor folder, print added images, delete image after printing.
private void bw_dowork(object sender, doworkeventargs e) { filesystemwatcher watcher = new filesystemwatcher(); watcher.path = @"c:\images"; watcher.created += new filesystemeventhandler(watcher_changed); watcher.enableraisingevents = true; } private void watcher_changed(object sender, filesystemeventargs e) { try { printdocument mydoc = new printdocument(); mydoc.printpage += new printpageeventhandler(print); filepath = e.fullpath; mydoc.printersettings.printername = @"\\network printer"; mydoc.print(); using (streamwriter sw = new streamwriter("c:\\error.txt")) { sw.writeline("printed file: " + filepath); } file.delete(e.fullpath); } catch(exception excep) { using (streamwriter sw = new streamwriter("c:\\error.txt")) { sw.writeline("error: " + excep.tostring()); } } }
the problem exception thrown error: system.io.ioexception: process cannot access file because being used process.
file being used process when try delete it. i'm guessing because filesystemwatcher keeping sort of reference it. idea on here, delete file after gets printed?
edit: did not include function code before:
private void print(object sender, printpageeventargs e) { try { using (image = image.fromfile(filepath)) { point p = new point(0, 0); e.graphics.drawimage(i, p); } } catch(exception exep) { throw exep; } }
i applied using block suggestion function too, moved delete function event handler mydoc.endprint, ensure ties file cut, , seems trick.
void mydoc_endprint(object sender, printeventargs e) { file.delete(filepath); }
printdocument implements idisposable, need make sure releases it's file handle wrapping in using block.
private void bw_dowork(object sender, doworkeventargs e) { filesystemwatcher watcher = new filesystemwatcher(); watcher.path = @"c:\images"; watcher.created += new filesystemeventhandler(watcher_changed); watcher.enableraisingevents = true; } private void watcher_changed(object sender, filesystemeventargs e) { try { using (printdocument mydoc = new printdocument()) { mydoc.printpage += new printpageeventhandler(print); filepath = e.fullpath; mydoc.printersettings.printername = @"\\network printer"; mydoc.print(); using (streamwriter sw = new streamwriter("c:\\error.txt")) { sw.writeline("printed file: " + filepath); } } file.delete(e.fullpath); } catch(exception excep) { using (streamwriter sw = new streamwriter("c:\\error.txt")) { sw.writeline("error: " + excep.tostring()); } } }
Comments
Post a Comment