后台工作者线程

时间:2011-04-14 13:33:08

标签: c# winforms multithreading c#-4.0

我正在努力找出保持我的应用程序响应的最佳方法。下面显示了我目前正在使用的代码。我发现后台工作线程是要走的路。

    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");
            }

        }


    }

    }

3 个答案:

答案 0 :(得分:1)

让您的程序保持响应的最简单方法是使用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);

请参阅documentation

答案 1 :(得分:0)

答案 2 :(得分:0)

假设您发布的方法在UI线程的上下文中运行, 你需要做的就是包装逻辑(foreach部分) 在如下方法中:

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

并致电ThreadPool.QueueWorkItem(new WaitCallback(DeleteFiles)); 来自cleanfiles方法。

如果运行.NET 4.0,则可以使用以下内容:

Task myTask = Task.Factory.StartNew( () => DoWork(null)); 然后检查myTask状态,看看它是否完成。