2012-09-28 75 views
1

我對.NET中的線程技術非常陌生,並且對Java線程的使用有限。總之,我有一個有System.Windows.Forms.Timer對象的表單。計時器每隔1000ms進行一次滴答。事件處理程序僅檢查bool類變量(即processingResponseFiles)以確定是否正在處理處理請求文件的當前操作。如果沒有進行,它應該處理任何請求文件。否則,它不應該做任何事情。計時器對象和BackgroundWorker

ProcessRequestFiles方法查看請求,然後運行BackgroundWorker來執行該工作。我掙扎的問題是,即使我在ProcessingRequestFiles方法的第一條語句中將它分配給true,processingResponseFiles的值始終爲false。有人可以告訴我爲什麼processingResponseFiles的值總是假,即使我將其設置爲ProcessRequestFile()方法嗎?

我需要保護此方法,以便它不會被執行多次。

private void timerRequestTimer_Tick(object sender, EventArgs e) 
{ 
    if (!processingResponseFiles) 
    { 
     ProcessRequestFile();     
    } 

private void ProcessRequestFile() 
{ 
    processingResponseFiles = true; 

    // Process Request Files 
    // If request type is Synchronize Customers 
    // Run thread that synchronizes customers 
    // If request type is Synchronize Items 
    // Run thread that synchronizes items 

    processingResponseFiles = false; 
} 
+0

你有沒有想過看Singleton或Mutex ..? – MethodMan

回答

2

這不是很清楚,太多的東西註釋掉,但很明顯的標誌需要在BackgroundWorker.RunWorkerCompleted事件處理程序復位至false。你才知道這項工作已經完成。或者只使用BackgroundWorker.IsBusy屬性。

+0

我絕對認爲我需要改變設計方法,但是,你能想到爲什麼類變量processingResponseFiles始終爲真的任何原因嗎?目前,我沒有在任何線程中觸及它,每次Timer被觸發時,即使我在表單上的ProcessRequestFile()方法中將其設置爲true,該值也始終爲false的默認值。無論哪種方式,我將更多地瞭解線程,但是,我想了解導致bool類變量always = false的情況。 – Grasshopper

+0

您在方法結束時將它重新設置爲false。這意味着定時器的Tick事件處理程序將**總是**將其設置爲false。正如我所解釋的,在RunWorkerCompleted事件處理程序中將其設置爲false。 –

+0

漢斯的方法是非常好的,但我不確定OP是否明白他是在試圖自己做什麼 – MethodMan