2013-05-29 77 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