title: Can't Delete zip files after extracting them
body: <p>I have a method that extracts multiple zip files but can't delete them until application close. I think it's a bug in <code>DotNetZip version 1.9.1.5</code> library.</p>
  
  <p>my zip files:</p>
  
  <pre><code>Hezareh.z01
  Hezareh.z02
  Hezareh.z03
  Hezareh.zip
  </code></pre>
  
  <p>code to extract files:</p>
  
  <pre><code>        private void InstallUpdates()
          {
              string tempDir = Path.Combine(Environment.CurrentDirectory, MainViewModel.TemporaryDirectoryName);
              string mainZipFileName = Path.Combine(tempDir, 
                  _updateConfig.ZipFiles.Single(f =&gt; f.IsFirstPart).PathOnClient); // i'm sure this is Hezareh.zip file
              string installPath = Path.Combine(Environment.CurrentDirectory, Properties.Settings.Default.InstallationDirectory);
              // i also tried: using (var zipFile = new ZipFile(mainZipFileName)) 
              using (var zipFile = ZipFile.Read(mainZipFileName))
              {
                  // same problem for ExtractAll method.
                  // zipFile.ExtractAll(installPath, ExtractExistingFileAction.OverwriteSilently);
                  foreach (ZipEntry entiry in zipFile)
                  {
                      entiry.Extract(installPath, ExtractExistingFileAction.OverwriteSilently);
                  }
                  // zipFile.Close() or any same method does not exists and zipFile.Dispose() is called
                  // automatically but even when i call it manually still have same problem.
              }
  
              DeleteFiles();
          }
          private void DeleteFiles()
          {
              var files = Directory.GetFiles(Path.Combine(Environment.CurrentDirectory, MainViewModel.TemporaryDirectoryName));
              foreach (string file in files)
              {
                  File.Delete(file); // exception occure here 
              }
          }
  </code></pre>
  
  <p><a href="https://stackoverflow.com/questions/6577476/c-sharp-deleting-a-zip-file-after-unzipping">This question</a> did not work for me and I'm going to burn my head.</p>
  
  <p>Exception:</p>
  
  <pre><code> The process cannot access the file 'D:\Projects\...\App\bin\Debug\UpdaterTemp\Hezareh.z01' because it is being used by another process.
     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
     at System.IO.File.Delete(String path)
     at Meshkat.Updater.App.ViewModels.InstallUpdatesViewModel.DeleteDownloadedUpdates() in D:\Projects\Meshkat.Updater\Meshkat.Updater.App\ViewModels\InstallUpdatesViewModel.cs:line 60
     at Meshkat.Updater.App.ViewModels.InstallUpdatesViewModel.Hide() in D:\Projects\Meshkat.Updater\Meshkat.Updater.App\ViewModels\InstallUpdatesViewModel.cs:line 129
     at Meshkat.Updater.App.RelayCommand.Execute(Object parameter) in D:\Projects\Meshkat.Updater\Meshkat.Updater.App\RelayCommand.cs:line 146
     at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
     at System.Windows.Controls.Primitives.ButtonBase.OnClick()
     at System.Windows.Controls.Button.OnClick()
     at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
     at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
     at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
     at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
     at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
     at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
     at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
     at System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject sender, MouseButtonEventArgs e)
     at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
     at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
     at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
     at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
     at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
     at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
     at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
     at System.Windows.Input.InputManager.ProcessStagingArea()
     at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
     at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
     at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
     at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled)
     at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled)
     at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled)
     at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
     at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
     at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
     at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
     at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
     at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
     at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
     at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&amp; msg)
     at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
     at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
     at System.Windows.Threading.Dispatcher.Run()
     at System.Windows.Application.RunDispatcher(Object ignore)
     at System.Windows.Application.RunInternal(Window window)
     at System.Windows.Application.Run(Window window)
     at System.Windows.Application.Run()
     at Meshkat.Updater.App.App.Main() in D:\Projects\Meshkat.Updater\Meshkat.Updater.App\obj\x86\Debug\App.g.cs:line 0
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Threading.ThreadHelper.ThreadStart()
  </code></pre>