2013-05-29 73 views
1

我有一個情況下,在一個連續運行的線程「計時器」調用我的函數「custommethod」。我無法控制系統代碼,這僅僅是爲了演示系統如何工作,我甚至不知道哪些代碼已被寫入系統代碼如何檢測是否在這種情況下刪除項目

系統代碼

timer duration = 1000 
    void timer_elapsed() 
    { 
      foreach(string symbol in symbols) //symbol list may vary 
      { 
       custommethod(symbol); 
      } 
    } 

端系統代碼

所以,我的方法 「custommethod」 剛剛獲得由系統代碼的參數週期性。當用戶添加或刪除由系統代碼處理的符號時,符號列表可能會有所不同。我所得到的是週期性的活動符號。所以,我關心的是保留一個活動符號列表。

我的代碼

function custommethod(string symbol) 
{ 
     //Check whether new symbol is added or a symbol is deleted 
} 

結束我的代碼

這是我到目前爲止已經試過

HashTable ht=new HashTable(); 
    function custommethod(string symbol) 
    { 
      //Check whether new symbol is added or a symbol is deleted 
      if(!ht.ContainsKey(symbol)) 
      { 
       ht.Add(symbol,0); //New symbol added 
      } 
      //How will i come to know whether a symbol is deleted or not 
    } 
+0

有沒有辦法讓你知道timer_elapsed是否已經發生? –

+0

計時器是否總是1秒?如果是這樣,您可以存儲DateTime.Now,您將該符號輸入到HashTable中,然後檢查每次獲取新符號時是否過期。 – ChrisO

+0

實際上我沒有發送消息給使用Windows消息傳遞的系統代碼,而消息傳遞又調用了具有活動符號的自定義方法功能 – Tuscan

回答

1

如果ht是相同的symbols那就不好了。不應該改變foreach循環的來源。

如果是這種情況,你應該生產一個新的集合,然後用舊的替換它。

+0

正如我告訴你,我不知道系統代碼。這只是爲了簡化事情。 – Tuscan

1

我不會做一個「爲每個」方法,而是做了一套新的,並使用一個HashSet(雖然大部分是LINQ的,所以哈希表可能是罰款,IDK)

HashSet oldSet;//construct that correctly 
HashSet newSet;//construct that correctly also 
HashSet deletedSet = oldSet.Except(newSet); 
HashSet addedSet = newSet.Except(oldSet); 
老集之間的一系列比較
+1

我認爲這裏的問題是foreach是固定的。他無法修改該部分。 – ChrisO

+0

@ChrisO那麼他是SOL,因爲如果他從不知道集合的結束(界限),他就無法確定集合的差異。 – IdeaHat