避免界面假死[简单示例]

很多写过的,好像是,没查:)
写下来给自己留个备份。

按钮点击
private void button2_Click(object sender, EventArgs e)
{
    DialogResult result 
= folderBrowserDialog1.ShowDialog();

    
if (result == DialogResult.OK)
    {
        textBox2.Text 
= folderBrowserDialog1.SelectedPath;
    }

    Thread thread 
= new Thread(new ThreadStart(GetFolderSizeThread));
    thread.Start();
}
长时间数据计算函数:
private ulong GetFolderSize(string strFolderName)
{
    
ulong result = 0;

    DirectoryInfo info 
= new DirectoryInfo(strFolderName);

    FileInfo[] arrFileInfo 
= info.GetFiles();

    
foreach (FileInfo fileinfo in arrFileInfo)
    {
        result 
+= (ulong)fileinfo.Length;
    }

    DirectoryInfo[] arrDirInfo 
= info.GetDirectories();

    
foreach (DirectoryInfo dirInfo in arrDirInfo)
    {
        result 
+= GetFolderSize(dirInfo.FullName);
    }

    
return result;
}
线程方法:
private void GetFolderSizeThread()
{
    ulong longFolderSize 
= GetFolderSize(textBox1.Text);

    SetLabelHandler handler 
= delegate(ulong size)
    {
        label1.Text 
= string.Format("总大小:{0:N} KB", size / 1024);
    };

    
if (label1.InvokeRequired)
    {
        Invoke(handler, 
new object[] { longFolderSize });
    }
}
委托:
public delegate void SetLabelHandler(ulong size);

posted on 2006-06-19 17:24  萝卜青菜  阅读(514)  评论(0编辑  收藏  举报

导航