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
\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
\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
using System;\r
using System.Collections.Generic;\r
+using System.Threading;\r
\r
namespace CompleteEraser\r
{\r
{\r
event ProgressingEventHandler Progressing;\r
event ProgressedEventHandler Progressed;\r
- void Execute(IEnumerable<string> targets);\r
+ event EventHandler Complete;\r
+ void ExecuteAsync(IEnumerable<string> targets, CancellationToken cancelToken);\r
}\r
}\r
this.progressBar1.Maximum = this.files.Count();\r
this.op.Progressing += new ProgressingEventHandler(op_Progressing);\r
this.op.Progressed += new ProgressedEventHandler(op_Progressed);\r
+ this.op.Complete += op_Complete;\r
+ }\r
+\r
+ void op_Complete(object sender, EventArgs e)\r
+ {\r
+ this.Close();\r
}\r
\r
private void MainForm_Shown(object sender, EventArgs e)\r
\r
this.tokenSource = new CancellationTokenSource();\r
\r
- this.task = new Task(() =>\r
- {\r
- op.Execute(this.files);\r
- });\r
- this.task.ContinueWith((t) =>\r
- {\r
- this.BeginInvoke(new Action(() =>\r
- {\r
- this.Close();\r
- }));\r
- });\r
- this.task.Start();\r
+ op.ExecuteAsync(this.files,this.tokenSource.Token);\r
}\r
\r
void op_Progressing(object sender, ProgressingEventArgs e)\r
{\r
- this.BeginInvoke(new Action(() =>\r
- {\r
- if (e.fileName == null)\r
- this.label2.Text = Resources.FINAL_PROCESS;\r
- else\r
- this.label2.Text = string.Format(Resources.FILE_PROCESS, this.TrimFullPath(e.fileName));\r
- }));\r
+ if (e.fileName == null)\r
+ this.label2.Text = Resources.FINAL_PROCESS;\r
+ else\r
+ this.label2.Text = string.Format(Resources.FILE_PROCESS, this.TrimFullPath(e.fileName));\r
}\r
\r
void op_Progressed(object sender, ProgressedEventArgs e)\r
{\r
- CancellationToken token = this.tokenSource.Token;\r
- if (token.IsCancellationRequested)\r
- token.ThrowIfCancellationRequested();\r
-\r
if (e.ex == null)\r
{\r
- this.BeginInvoke(new Action(() => { if (this.progressBar1.Value < this.progressBar1.Maximum) this.progressBar1.Value++; }));\r
+ if (this.progressBar1.Value < this.progressBar1.Maximum)\r
+ this.progressBar1.Value++;\r
}else if(e.ex is IOException){\r
DialogResult result = MessageBox.Show(e.ex.Message, "", MessageBoxButtons.AbortRetryIgnore);\r
switch (result)\r
ProcessStartInfo info = new ProcessStartInfo(Application.ExecutablePath);\r
info.Verb = "runas";\r
info.UseShellExecute = true;\r
+ if (this.info == null)\r
+ info.Arguments = string.Join(" ", this.files);\r
Process.Start(info);\r
this.Hide();\r
Thread.Sleep(1000);\r
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \r
// 既定値にすることができます:\r
// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.17.0.0")]\r
-[assembly: AssemblyFileVersion("1.17.0.0")]\r
+[assembly: AssemblyVersion("1.18.0.0")]\r
+[assembly: AssemblyFileVersion("1.18.0.0")]\r
using System;\r
using System.Collections.Generic;\r
using System.IO;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
\r
namespace CompleteEraser\r
{\r
{\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
- Progressing(this,new ProgressingEventArgs(file));\r
+ Progressing(this, new ProgressingEventArgs(file));\r
\r
RETRY:\r
- ProgressedEventArgs e = new ProgressedEventArgs(file,null);\r
+ ProgressedEventArgs e = new ProgressedEventArgs(file, null);\r
\r
try\r
{\r
- FileBreaker.BreakFileOrFolder(file);\r
+ await Task.Factory.StartNew(() =>\r
+ {\r
+ FileBreaker.BreakFileOrFolder(file);\r
+ }, cancelToken);\r
+ }\r
+ catch (OperationCanceledException)\r
+ {\r
+ break;\r
}\r
catch (UnauthorizedAccessException uae)\r
{\r
if (e.breaked)\r
break;\r
}\r
+ this.Complete(this, null);\r
}\r
}\r
}\r