Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果在运行子窗体时单击父窗体,则在关闭子窗体之前,窗口处于冻结状态_C#_Winforms - Fatal编程技术网

C# 如果在运行子窗体时单击父窗体,则在关闭子窗体之前,窗口处于冻结状态

C# 如果在运行子窗体时单击父窗体,则在关闭子窗体之前,窗口处于冻结状态,c#,winforms,C#,Winforms,我有一个过程,在这个过程中,它必须从文件夹中删除文件。删除文件时,自定义进度表正在打开,并以百分比显示已删除状态。这很好用。但是,如果我单击/双击父窗体或进度窗体,则应用程序将被冻结,并且进度窗体将停止更新状态(它位于标签中)。删除进程正在运行,但进度表上的状态未更新。 此应用程序位于vs2005中 下面是代码 private void DeleteFiles() { string path = "c:\Example"; if (

我有一个过程,在这个过程中,它必须从文件夹中删除文件。删除文件时,自定义进度表正在打开,并以百分比显示已删除状态。这很好用。但是,如果我单击/双击父窗体或进度窗体,则应用程序将被冻结,并且进度窗体将停止更新状态(它位于标签中)。删除进程正在运行,但进度表上的状态未更新。 此应用程序位于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)
            {

            }
        }

谢谢你的帮助


谢谢

你使用了backgroundworker吗?我认为你应该在后台线程(例如:backgroundworker类)中运行
EmptyFolder
方法,然后更新到UI,如果你不使用backgroundworker,不要忘了在更新到UI时调用Invoke/beginInvoke。如果单击主窗体时它挂起,这个表单的焦点是什么?这里似乎有一些好的答案:主表单的激活事件中有代码吗?