【发布时间】:2014-02-09 09:45:59
【问题描述】:
下面的代码是从一个任务中调用的 t = new task(() => StartScanAsync(path)); 但定时器事件没有触发,定时器在 StartTimer 中启动。
private void StartScanAsync(string path)
{
StartTimer();
foreach (string fsPath in Alphaleonis.Win32.Filesystem.Directory.EnumerateFileSystemEntries(path, "*", SearchOption.AllDirectories, true))
{
Alphaleonis.Win32.Filesystem.FileInfo finfo = new Alphaleonis.Win32.Filesystem.FileInfo(fsPath);
fileClass.AddFile(finfo);
// UpdateStatus(fsPath);
UpdateTotalFilesScanned();
TotalFileSize += finfo.Length;
UpdateTotalFileSize(TotalFileSize);
IdentifyFileType.FileType ft = FileType.LoadPathRet(fsPath);
// Application.DoEvents();
}
UpdateStatus("Done Scanning.");
StopTimer();
}
我也尝试了 Parrallel.ForEach 并且遇到了同样的问题。
下面的代码应该启动一个计时器,在一个大型集合上运行 Parrallel.ForEach,然后停止计时器。但是,Timer 事件没有被触发...任何想法为什么以及如何解决这个问题?
StartTimer();
Parallel.ForEach(Alphaleonis.Win32.Filesystem.Directory.EnumerateFileSystemEntries(path, "*", SearchOption.AllDirectories), fsPath =>
{
Alphaleonis.Win32.Filesystem.FileInfo finfo = new Alphaleonis.Win32.Filesystem.FileInfo(fsPath);
fileClass.AddFile(finfo);
UpdateStatus(fsPath);
UpdateTotalFilesScanned();
TotalFileSize += finfo.Length;
UpdateTotalFileSize(TotalFileSize);
// IdentifyFileType.FileType ft = FileType.LoadPathRet(fsPath);
Application.DoEvents();
});
StopTimer();
第一个代码在不在任务中时工作,第二个代码不在任务中运行但仍然不工作。
所以澄清一下:
问题1)为什么定时器(System.Windows.Forms.Timer(我认为))不会在Task中触发,并且在Parallel.ForEach周围时也不会触发?
问题 2)如何在 Parallel.ForEach 任务和 Task 任务中每秒提高一次 Tick(以获取每秒扫描的文件)?
【问题讨论】:
-
只是为了确定一下,你真的是
Start()Task吗? -
是的,任务已启动。即使它不会触发 Tick 事件。
标签: c# timer task parallel.foreach