C# 为什么在使用backgroundworker从硬盘读取文件时,程序有时会冻结?

C# 为什么在使用backgroundworker从硬盘读取文件时,程序有时会冻结?,c#,.net,winforms,openpop,C#,.net,Winforms,Openpop,我认为原因是它正在从硬盘读取/加载每个文件,有些文件大小是8.5MB 我正在使用OpenPop加载从pop3电子邮件提供商下载并保存的eml(电子邮件)文件 现在硬盘上有7000多个eml文件,大约8.5MB,23KB int countUploadMsg = 0; private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) { int counter =

我认为原因是它正在从硬盘读取/加载每个文件,有些文件大小是8.5MB 我正在使用OpenPop加载从pop3电子邮件提供商下载并保存的eml(电子邮件)文件

现在硬盘上有7000多个eml文件,大约8.5MB,23KB

int countUploadMsg = 0;
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            int counter = 0;
            allLoadedMessages = new List<OpenPop.Mime.Message>();
            OpenPop.Mime.Message loadedMessage = null;
            DirectoryInfo di = new DirectoryInfo(@"e:\testmail\");
            FileInfo[] files = di.GetFiles();
            foreach (FileInfo file in files)
            {
                loadedMessage = OpenPop.Mime.Message.Load(file);
                allLoadedMessages.Add(loadedMessage);
                counter += 1;
                int nProgress = counter * 100 / files.Length;
                backgroundWorker2.ReportProgress(nProgress);
            }
        }
使用OpenPop库的加载部分

所以,也许这需要时间,我尝试的速度并没有那么快,但我还没有找到更快的eml文件读取器/解析器


我的问题是,如果代码在backgroundworker的DoWork事件中,为什么有时程序会在某些文件上停止/冻结几秒钟?使用backgroundworker不是应该工作顺利吗?也许时间更长,但为什么程序有时会冻结?我使用backgroundworker进行加载,但有时它似乎会从硬盘读取文件,并使程序冻结,直到它读取完当前打开的文件为止。

如果问题是OpenPOP的MIME解析器速度慢(确实慢),您可以尝试切换到速度明显更快的我的库(即快25倍以上)比OpenPOP快。

如果问题是OpenPOP的MIME解析器速度慢(确实慢),您可以尝试切换到速度明显快(即快25倍以上)的my library而不是OpenPOP。

请添加启动后台工作程序的代码,以及后台工作程序的“工作已完成”或“进度”事件中的任何代码。后台工作程序中的所有内容都应在单独的线程中运行,如您所述。如果您的后台工作程序使用正确,则不会发生这种情况。您是否在其他线程中尝试过nt机器和文件与系统不在同一个驱动器上?可能不仅仅是你的应用程序,而是整个系统的速度变慢,因为你造成了太多的硬盘流量…可能不是,只是猜测我想我知道问题出在哪里。一开始问题是当我单击其中一个应用程序上的ListView控制列时,出现了问题3列。当我单击一列时,它会对项目进行排序。我想当我单击其中一列时,它会使其变慢或冻结。dowork事件中的进度是继续工作。我单击的列正在冻结。我现在检查了,如果我单击其他按钮,它会正常工作。因此,我需要解决排序机制。我应该问一个问题吗关于排序或编辑此问题的其他问题?我知道该做什么,但不确定如何做。请添加启动后台工作程序的代码,以及后台工作程序的工作完成或进度事件中的任何代码。后台工作程序中的所有内容都应在您提到的单独线程中运行。I如果你的backgroundworker使用正确,就不应该发生这种情况。你是否在不同的机器上尝试过,并且文件与系统不在同一个驱动器上?可能不仅仅是你的应用程序,而是整个系统的速度变慢,因为你造成了太多的硬盘流量……可能不是,只是猜测我想我知道问题出在哪里。一开始的问题是,当我单击其中一个上的ListView控件列时,其中有3列。我这样做了,当我单击一个列时,它将对项目进行排序。我猜当我单击其中一个列时,它会使其变慢或冻结。dowork事件中的进度是继续工作。我单击的列正在冻结。我现在检查了是否单击了其他列按钮它工作顺利。所以我需要的是解决排序机制。我应该问另一个关于排序的问题还是编辑这个问题?我知道怎么做,但不知道怎么做。
loadedMessage = OpenPop.Mime.Message.Load(file);