private void UpdateProgressDialog(object sender, EventArgs e)
 {
     if (progressDialog.HasUserCancelled)
     {
         state = ThumbnailsPreloaderState.Canceled;
     }
     else if (state == ThumbnailsPreloaderState.GettingNumberOfItems)
     {
         if (prevState != state)
         {
             prevState              = state;
             progressDialog.Line1   = Resources.ThumbnailsPreloader_PreloadingThumbnails;
             progressDialog.Line3   = Resources.ThumbnailsPreloader_CalculatingNumberOfItems;
             progressDialog.Marquee = true;
         }
         progressDialog.Line2 = String.Format(Resources.ThumbnailsPreloader_Discovered0Items, totalItemsCount);
     }
     else if (state == ThumbnailsPreloaderState.Processing)
     {
         if (prevState != state)
         {
             prevState              = state;
             progressDialog.Line1   = String.Format(Resources.ThumbnailsPreloader_PreloadingThumbnailsFor0Items, totalItemsCount);
             progressDialog.Maximum = totalItemsCount;
             progressDialog.Marquee = false;
         }
         progressDialog.Title = String.Format(Resources.ThumbnailsPreloader_Processing, (processedItemsCount * 100) / totalItemsCount);
         progressDialog.Line2 = Resources.ThumbnailsPreloader_Name + ": " + Path.GetFileName(currentFile);
         progressDialog.Line3 = String.Format(Resources.ThumbnailsPreloader_ItemsRemaining, totalItemsCount - processedItemsCount);
         progressDialog.Value = processedItemsCount;
     }
 }
        private async void Run()
        {
            await Task.Run(() =>
            {
                //Get total items count
                state = ThumbnailsPreloaderState.GettingNumberOfItems;
                foreach (int itemsCount in directoryScanner.GetItemsCount())
                {
                    totalItemsCount += itemsCount;
                    if (state == ThumbnailsPreloaderState.Canceled)
                    {
                        return;
                    }
                }
                if (totalItemsCount == 0)
                {
                    state = ThumbnailsPreloaderState.Done;
                    return;
                }
                //Start processing
                state = ThumbnailsPreloaderState.Processing;
                ThumbnailPreloader thumbnailPreloader = new ThumbnailPreloader();
                foreach (string item in directoryScanner.GetItems())
                {
                    currentFile = item;
                    thumbnailPreloader.PreloadThumbnail(item);
                    processedItemsCount++;
                    if (processedItemsCount == totalItemsCount)
                    {
                        state = ThumbnailsPreloaderState.Done;
                    }
                    if (state == ThumbnailsPreloaderState.Canceled)
                    {
                        return;
                    }
                }
            });

            Application.Exit();
        }