当前位置:首页>>ASP.NET教程>>Asp.NET综合技巧>>避免界面假死[简单示例]
避免界面假死[简单示例]
2009/11/8 13:19:18
很多写过的,好像是,没查:)
写下来给自己留个备份。

按钮点击
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