2013-09-24 50 views
0

我正在打印PrintDocument爲PDF.I,然後將此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; 
    } 
} 

我想某種上限增加任何花費的時間或檢驗該文件已準備就緒的次數。如果打印機出現故障,則線程將一直等待。我如何實現它?

+1

而這正是事件,回調或消息傳遞可能是有用的... –

+0

基本上,你想幹什麼「IsFileReady」命中計數? –

+0

這是一個WCF service.I嘗試實現FileSystemWatcher以及文件打印event.Nar工作,因此這段代碼 – user1550951

回答

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; 
    } 
+0

增加Sleep語句以減慢循環 – jh00ker