C#删除文件太多,窗体假死了,怎么优化代码

 我来答
376710727
2017-06-24 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1276万
展开全部

窗体假死只是“用户体验”,而你优化可以从两方面入手:

1、解决速度慢的问题,从本质上解决“等待”的问题。

2、采用多线程,后台线程负责处理,UI线程保持畅通,并给用户处理反馈,让用户感觉“程序在干活,而不是死掉了”。


从你的描述中,程序需要删除大量文件, 一般C#做删除,无非是用IO类,这个类是微软封装好的,基本上没有优化空间。所以建议从第二点入手,运用多线程来删除,同时每删除一个文件,给UI一个反馈,让用户知道完成的进度。

核心代码:

.cs:
public delegate void SysBusyDelegate(bool isbusy, decimal compeletion);
public event SysBusyDelegate sysbusyEvent = null;

private void DeleteFiles()
{
 var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
 {
    //这里是你删除的函数或者代码, 自己写一个返回值,
     //后台线程通过委托,把回调到UI线程
     //我定义的是decimal类型的返回值,用于返回百分比,   
   var rst= System.IO.Delete(file);
    //sysbusyEvent.Invoke(false, rst); 
    
    // 返回false表示整个后台线程结束, 返回true则表示还在进行中
   sysbusyEvent.Invoke(false, 100);
  })) { IsBackground = true };
 thread.Start();
 sysbusyEvent += (state, result) =>
 {
    Application.Current.Dispatcher.BeginInvoke(new Action(() =>
    {
         if(state ==true)
         //这里写UI的处理,可以用自定义的 控件或者你自己的方法
         //我用的是简单的文本框来展示
         textblock1.Text = "当前完成:"+result.ToString()+"%";
         else
         textblock1.Text = "全部完成!";
    }
  }
}
百度网友2c1a656
2017-06-24 · TA获得超过2747个赞
知道小有建树答主
回答量:215
采纳率:66%
帮助的人:117万
展开全部
可以开线程删除;
Thread thread=new Thread(new ThreadStart(方法));
thread.IsBackground=true;
thread.start();
纯手打,可能单词有出入....
命名空间是System.Threading;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式