我认为原因是它正在从硬盘读取/加载每个文件一些文件大小为 8.5MB 我正在使用 OpenPop 加载我从我的 pop3 电子邮件提供商下载并保存的 eml(emails) 文件。
现在在硬盘上我有超过 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);
}
}
肯定问题出在这一行:
loadedMessage = OpenPop.Mime.Message.Load(file);
使用 OpenPop 库的 Load 部分。
所以也许它需要时间它不是我尝试的那么快,但到目前为止我还没有找到更快的 eml 文件阅读器/解析器。
我的问题是为什么如果代码在后台工作人员的 DoWork 事件中,有时程序会在某些文件上停止/冻结几秒钟?使用 backgroundworker 不应该顺利工作吗?也许更长的时间,但为什么程序有时会冻结?我正在使用后台工作程序进行加载,但似乎有时它正在从硬盘读取文件并使程序冻结,直到它完成读取它所在的当前文件。