2011-04-14 1 views
-1

J'essaie de trouver la meilleure façon de garder mon application sensible. Ci-dessous montre le code avec lequel je travaille actuellement. Ce que j'ai trouvé est que le fil de travail d'arrière-plan est la voie à suivre.background worker thread

private void cleanFiles() 
    { 
      if (listView1.CheckedItems.Count != 0) 
      { 

       // If so, loop through all checked files and delete. 

       foreach (ListViewItem item in listView1.CheckedItems) 
       { 

        string fileName = item.Text; 
        string filePath = Path.Combine(tFile + fileName); 

        try 
        { 

         File.Delete(filePath); 
        } 
        catch (Exception) 
        { 
         //ignore files being in use 
        } 

        MessageBox.Show("Files Cleaned"); 
       } 


      } 
      else 
      { 
       MessageBox.Show("Please put a check by the files you want to delete"); 
      } 

     } 


    } 

    } 

Répondre

1

La meilleure façon de garder votre programme adapté est d'utiliser le BackgroundWorker.

List<string listWithFilenames = new List<string>(); 
BackgroundWorker bw = new BackgroundWorker(); 
bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
bw.RunWorkerAsync(listWithFilenames); 

Voir le documentation.

+0

Le travailleur de l'arrière-plan m'a aidé. Je vous remercie! – partialdata

0

en supposant que la méthode que vous avez affichée fonctionne dans le contexte du thread d'interface utilisateur, tout ce que vous devez faire est envelopper la logique (la partie foreach) dans une méthode comme:

private void DeleteFiles(object state) 
{ 
/// your logic here 
} 

et appelez le ThreadPool.QueueWorkItem(new WaitCallback(DeleteFiles)); à partir de la méthode cleanfiles.

si vous exécutez .NET 4.0, vous pouvez utiliser quelque chose comme:

Task myTask = Task.Factory.StartNew(() => DoWork(null)); puis vérifiez l'état MyTask plus tard, pour voir si son fait.

+0

Je reçois une erreur Delegate 'System.Action' ne prend pas 1 argument – partialdata

+0

mon erreur, code fixe – Menahem