OSDN Git Service

asyncを使用するようにした
[completeeraser/CompleteEraser.git] / CompleteEraser / BreakRecyleBin.cs
index 61ed0da..0b00b88 100644 (file)
@@ -2,6 +2,8 @@
 using System.Collections.Generic;\r
 using System.Runtime.InteropServices;\r
 using System.IO;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
 \r
 namespace CompleteEraser\r
 {\r
@@ -18,8 +20,9 @@ namespace CompleteEraser
 \r
         public event ProgressingEventHandler Progressing;\r
         public event ProgressedEventHandler Progressed;\r
+        public event EventHandler Complete;\r
 \r
-        public void Execute(IEnumerable<string> files)\r
+        public async void ExecuteAsync(IEnumerable<string> files,CancellationToken cancelToken)\r
         {\r
             foreach (string file in files)\r
             {\r
@@ -27,17 +30,27 @@ namespace CompleteEraser
 \r
                 try\r
                 {\r
-                    FileBreaker.BreakFileOrFolder(file);\r
+                    await Task.Factory.StartNew(() =>\r
+                    {\r
+                        FileBreaker.BreakFileOrFolder(file);\r
+                    }, cancelToken);\r
                 }\r
-                catch(IOException){\r
+                catch (OperationCanceledException)\r
+                {\r
+                    return;\r
+                }\r
+                catch (IOException)\r
+                {\r
                     //ゴミ箱の中にフォルダーがあるとIOErrorがでるので握りつぶす\r
                 }\r
 \r
-                Progressed(this, new ProgressedEventArgs(file,null));\r
+                Progressed(this, new ProgressedEventArgs(file, null));\r
             }\r
 \r
             Progressing(this, new ProgressingEventArgs(null));\r
             SHEmptyRecycleBin(IntPtr.Zero, "", SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI);\r
+\r
+            this.Complete(this, null);\r
         }\r
     }\r
 }\r