C#删除文件太多,窗体假死了,怎么优化代码
2个回答
展开全部
窗体假死只是“用户体验”,而你优化可以从两方面入手:
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 = "全部完成!";
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询