2013-10-07 60 views
0

我正在運行一個非線程應用程序,負責檢查文件的數據庫,更新位置並將文件移動到新目錄。強制我的控制檯應用程序進入睡眠/暫停/休眠狀態

但是每週一至週四週六我們的服務器包含SQL Server將在晚上8:40重新啓動。在晚上8點30分,直到晚上9點或8-9點,如果那更容易,我需要我的程序睡覺。

在那些日子晚上8點(或晚上8點30分),我希望我的程序可以休眠/等待/暫停,直到晚上9點(我可以安全地假設重啓將在此時完成)。

這很簡單/可能嗎?它可以在沒有線程的情況下完成嗎?如果我不得不使用線程,那麼對於從未使用線程的人來說,實現它很容易嗎?

+7

爲什麼不使用調度程序來運行應用程序? –

+0

我同意。使用調度程序是處理這個問題的最簡單方法。 – NotMe

+0

@BrianRasmussen該應用程序在接下來的45天左右全天候運行。我想我可以使用日期時間關閉我的程序在8點。然後讓計劃再次啓動它在9 –

回答

1

James,Try/Catch和using不是相互排斥的。

如果你決定要採取的方法是重試SQLEXCEPTION你不應該,但可以使用:

Thread.Sleep(1800000); 

這將等待30分鐘。然後你可以再次嘗試你的電話。我會建議,但這是一個快速,骯髒的選擇。

這可能是useful

您應該設計您的應用程序來處理數據庫連接丟失的情況。一旦連接重新建立,您可以批量處理您打算編寫的數據併發送全部數據。

考慮將其重寫爲服務。也許你想記錄連接問題。

try 
{ 
    using (SqlConnection sqlConnection = new SqlConnection(ConnectionProvider.ConnectionString(databaseName))) 
    { 
     using (SqlCommand command = new SqlCommand()) 
     { 

      if (sqlConnection.State != System.Data.ConnectionState.Open) 
      { 
       sqlConnection.Open(); 
      } 
      //command.configure etc... 
      command.ExecuteNonQuery(); 

     } 
    } 
} 
catch (SqlException ex) 
{ 
    //retry 
} 
+0

我可以直接在它中引入Thread.Sleep(),它可以直接使用,或者我必須重寫程序來使用線程嗎? –

+0

你的程序現在正在使用線程,但它只使用一個線程。如果在應用程序中包含System.Threading命名空間,則可以讓您的一個線程休眠幾毫秒或一段時間。 – Michael

+0

我不打算把它放到catch塊中,而是我打算抓住當前時間,如果它在指定的日期和小時內,那麼輸入這段代碼並等待30分鐘。這樣它仍然錯過了需要。感謝您的幫助,我認爲我可以完成這項工作。 –

相關問題