我基本上使用while(true)loop来观察文件夹;一旦文件准备好了,我就读它并处理它。该过程完成,直到所有文件都被照顾。这里是代码:
public void ReadIndefinitely(string tiffFileFolder, List<string> channelName, int signalLength)
{
string tiffFileName;
int nActiveStats = _signalDisplay.NActiveStatsOneChannel;
int nActiveChannels = _signalDisplay.NActiveChannel;
double signal;
double DeltaT;
bool keepReading = true;
int channelIndex;
int statIndex;
int signalIndex = 0;
while (signalIndex < signalLength)
{
for (int i = 0; i < nActiveChannels; i++)
{
tiffFileName = tiffFileFolder + channelName[i] + "_0001_0001_0001_" + (signalIndex + 1).ToString("0000") + ".tif";
channelIndex = (int)Enum.Parse(typeof(ChannelList), channelName[i]);
keepReading = true;
if(keepReading)
{
if (File.Exists(tiffFileName))
{
if (!IsFileLocked(tiffFileName))
{
for (int j = 0; j < nActiveStats; j++)
{
statIndex = _statsEnableEnumIndex[j];
DeltaT = ExtractTiffDeltaT(tiffFileName, "DeltaT=", 1);
signal = _signalManager.GetSignal(statIndex, tiffFileName);
UpdateSignal(channelIndex, j, signalIndex, DeltaT, signal);
}
keepReading = false;
signalIndex++;
}
else
{
System.Threading.Thread.Sleep(30);
}
}
}
// if (signalIndex % 5 == 0)
_signalDisplay.SetData(_XList, _YList, true);
}
}
}
我不得不警告你,这个操作占用了我90%的CPU。
这些文件是否已经存在?或者您想在文件复制/移动到目录时处理这些文件吗? – dtb 2013-02-24 23:29:02
他们还不存在,但他们会。我不知道什么时候,也许在10毫秒,也许在100毫秒,也许在1秒。你是对的,我想在他们准备好之后处理它们(复制/移动/生成)。 – 2013-02-24 23:31:12
听起来像是FileSystemWatcher的工作。使用一个有什么问题? – dtb 2013-02-24 23:32:06