我编写了代码,但它看起来并不优雅和直观。我现在尝试重构它。你在我的代码中看到任何反模式吗?
我正在处理图片。我从文件夹中获取图像,处理它并在此之后删除。
Console.WriteLine("Press ESC to exit");
bool isEmptyFolderFlagSet = false;
while (true)
{
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)
{
appExited(null, EventArgs.Empty);
return;
}
List<string> images = new List<string>(System.Linq.Enumerable.Concat
(System.IO.Directory.GetFiles(sourcePath, "*.pdf"), System.IO.Directory.GetFiles(sourcePath, "*.tif")));
if (images.Count == 0 && !isEmptyFolderFlagSet)
{
Console.WriteLine("Waiting for image...");
isEmptyFolderFlagSet = true;
}
else
{
isEmptyFolderFlagSet = false;
foreach (string imagePath in images)
{
try
{
processing.ProcessingFile(imagePath);
System.IO.File.Delete(imagePath);
}
catch (System.IO.FileNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
}
Thread.Sleep(500);
}
答案 0 :(得分:2)
在&#39;中放置一个条件。条款
Console.WriteLine("Press ESC to exit");
while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
//Code here
}
如果有很多文件?你应该使用EnumerateFiles而不是GetFiles(会快得多)
代替昂贵的try..catch只捕获FileNotFound,您可以使用System.IO.File.Exits(filename)方法。
如前所述,具有回调功能的定时器(可能是匿名的)将更合适。