首页 > 解决方案 > 如果在运行子窗体窗口时单击父窗体会冻结,直到关闭子窗体

问题描述

我有一个进程,在该进程中它必须从文件夹中删除文件。删除文件时,自定义进度表单正在打开并以百分比显示已删除状态。这工作正常。但是,如果我单击/双击父表单或进度表单应用程序正在冻结并且进度表单停止以更新状态(它在标签中)。删除过程正在运行,但状态未在进度表上更新。此应用程序在 vs2005 中。

下面是代码。

private void DeleteFiles()
        {
            string path = "c:\Example";
            if (Directory.Exists(path ))
            {

                Cursor = Cursors.No;
                long deletedSize = 0;
                frmLoading frmProgress = new frmLoading();
                frmProgress.ShowInTaskbar = false;
                frmProgress.lblLoading.Text = "Deleting Files ...(0%)";
                frmProgress.Show(frmMain);                
                frmProgress.Refresh();                
                frmMain.Refresh();                

                long totalSize = DirSize(new DirectoryInfo(path));
                EmptyFolder(new DirectoryInfo(path), totalSize, frmProgress, ref deletedSize);
                Directory.Delete(path, true);
                frmProgress.Close();
                Cursor = Cursors.Default;
            }
        }

private void EmptyFolder(DirectoryInfo directoryInfo, long totalSize, frmLoading frmProgress ,ref long deletedSize)
        {

            short percent;
            //long deletedSize=0;
            try
            {

                foreach (FileInfo file in directoryInfo.GetFiles())
                {
                    try
                    {
                        deletedSize += file.Length;
                        file.Delete();
                        percent = Convert.ToInt16((deletedSize * 100) / totalSize);
                        frmProgress.lblLoading.Text = "Deleting Files ...(" + percent.ToString() + "%)";      // Here progress form label is updating.                                          
                        frmProgress.Refresh();

                    }
                    catch (Exception ex)
                    {

                    }
                }

                foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
                {
                    EmptyFolder(subfolder, totalSize,frmProgress,ref deletedSize);
                }
            }
            catch (Exception ex)
            {

            }
        }

这是错误

您的帮助可能会不胜感激。

谢谢

标签: c#winforms

解决方案


推荐阅读