0

我正在打印PrintDocumentPDF。然后将此 PDF 存储在 MS SQL 表中。在将文档插入列之前,我必须确保文档已“打印”。我有以下代码来检查文件是否“可用” “:

public static bool IsFileReady(String sFilename)
{
    try
    {
         using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
         {
              if (inputStream.Length > 0)
              {
                  return true;
              }
              else
              {
                   return false;
              }
          }
    }
    catch (Exception)
    {
          return false;
    }
}

我想为它花费的时间或检查文件是否准备好的次数添加某种上限。如果打印机发生故障,那么线程将永远等待。我该如何实施?

4

1 回答 1

2

如果达到最大重试次数或已过最大时间,此代码将退出循环:

    private const int MAX_RETRIES = 100;
    private const int MAX_RETRY_SECONDS = 120;
    public static bool IsFileReady(String sFilename)
    {
        int tryNumber = 0;
        DateTime endTime = DateTime.Now + new TimeSpan(0, 0, MAX_RETRY_SECONDS);

        while (tryNumber < MAX_RETRIES && DateTime.Now < endTime)
        {
            try
            {
                using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    if (inputStream.Length > 0)
                    {
                        return true;
                    }
                }
            }
            catch (Exception)
            {
                //Swallow Exception
            }

            //Slow down the looping 
            System.Threading.Thread.Sleep(500);

            tryNumber += 1;
        }

        return false;
    }
于 2013-09-24T16:41:51.610 回答