我正在努力找出保持我的应用程序响应的最佳方法。下面显示了我目前正在使用的代码。我发现后台工作线程是要走的路。
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");
}
}
}
}
答案 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状态,看看它是否完成。