C# winform删除某目录下的文件 并在界面上实时显示删除的个数
比如:A目录下有100个文件(文件夹不是),点击删除按钮后程序删除了一个就在界面上显示一个好像要用线程什么的,求代码!...
比如:A目录下有100个文件(文件夹不是),点击删除按钮后 程序删除了一个就在界面上显示一个
好像要用线程什么的,求代码! 展开
好像要用线程什么的,求代码! 展开
4个回答
展开全部
推荐使用APM模式,就是形如 BeginDelete/EndDelete方式的调用。
在BeginDelete方法中,将你的删除文件函数放进来,这个函数可以返回删除的是第几个文件,然后在EndDelete中获取删除的文件的索引,放到界面显示即可。 你可能还需要用AutoResetEvent做下同步,如果有必要的话。
在BeginDelete方法中,将你的删除文件函数放进来,这个函数可以返回删除的是第几个文件,然后在EndDelete中获取删除的文件的索引,放到界面显示即可。 你可能还需要用AutoResetEvent做下同步,如果有必要的话。
更多追问追答
追问
偶是小白一枚,只求代码一堆。
追答
说错了,还是EAP模式好用点。 你看看BackGroundWorker组件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private void button1_Click(object sender, EventArgs e) { Thread th = new Thread(new ThreadStart(Run)); th.Start(); } private void Run() { string[] files = Directory.GetFiles("盘符:\\A"); for (int i =0 ; i < files.Length; i++) { File.Delete(files[i]); this.BeginInvoke(new MethodInvoker(() => { textBox1.Text = string.Format("已删除:{0}/{1}", i + 1, files.Length); })); Thread.Sleep(500); } }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用多线程的可以么?一样可以实现,就是效果锉一点。删大文件的时候界面会假死。可以的话就直接上代码了,不用开VS了。。。
追问
我看看可以不?
追答
//多线程
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(Run));
th.Start();
}
private void Run()
{
string[] files = Directory.GetFiles("C:\\test");
for (int i =0 ; i < files.Length; i++)
{
File.Delete(files[i]);
this.BeginInvoke(new MethodInvoker(() =>
{
textBox1.Text = string.Format("已删除:{0}/{1}", i + 1, files.Length);
}));
}
}
//单线程版
private void button1_Click(object sender, EventArgs e)
{
string[] files = Directory.GetFiles("C:\\test");
for (int i =0 ; i < files.Length; i++)
{
File.Delete(files[i]);
textBox1.Text = string.Format("已删除:{0}/{1}", i + 1, files.Length);
Application.DoEvents();//就这句
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
string[] files = Directory.GetFiles("d:\\ddd");
int count = files.Length;
for(int i=0;i<count;i++)
{
File.Delete(files[i]);
this.label1.Text = string.Format("已删除:{0};总共:{1}", i+1, count);
}
int count = files.Length;
for(int i=0;i<count;i++)
{
File.Delete(files[i]);
this.label1.Text = string.Format("已删除:{0};总共:{1}", i+1, count);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询