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