如何解决后台工作者线程
| 我试图找出使我的应用程序保持响应的最佳方法。下面显示了我当前正在使用的代码。我发现,Background Worker线程是解决之道。 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\");
}
}
}
}
解决方法
使程序保持响应状态的最简单方法是使用ѭ1。
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);
请参阅文档。
,看一下这些问题:
listView的跨线程问题
如何在GUI线程中执行代码
,假设您发布的方法在UI线程的上下文中运行,
您所需要做的就是包装逻辑(“ 3”部分)
用类似的方法:
private void DeleteFiles(object state)
{
/// your logic here
}
叫the5
从cleanfiles方法。
如果您运行.NET 4.0,则可以使用以下方法:
Task myTask = Task.Factory.StartNew( () => DoWork(null));
然后稍后检查myTask状态,以查看其是否完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。