如果将新的键\值对添加到静态字典中,我想在其他线程中执行某些操作。一种天真的方法是频繁地进行轮询,并检查ContainsKey(givenKey),但我想做得更快,而不是延迟轮询。
答案 0 :(得分:7)
您必须创建自己的词典。最佳做法是:
public enum Type
{
AddItem,
RemoveItem
}
public class DictChangedEventArgs<K, V> : EventArgs
{
public Type Type
{
get;
set;
}
public K Key
{
get;
set;
}
public V Value
{
get;
set;
}
}
public class OwnDict<K, V> : IDictionary<K, V>
{
public delegate void DictionaryChanged(object sender, DictChangedEventArgs<K, V> e);
public event DictionaryChanged OnDictionaryChanged;
private IDictionary<K, V> innerDict;
public OwnDict()
{
innerDict = new Dictionary<K, V>();
}
public void Add(K key, V value)
{
if (OnDictionaryChanged != null)
{
OnDictionaryChanged(this, new DictChangedEventArgs<K, V>() { Type = Type.AddItem, Key = key, Value = value });
}
innerDict.Add(key, value);
}
// ...
// ...
}
现在您可以自由地为Before-Add-Item
,After-Add-Item
创建活动。您还可以在Handled
- 类中添加一些DictChangedEventArgs
参数,以防止添加特殊项目。您还可以决定使用Type
- 枚举或为每个操作创建自己的事件。
但请务必确保您必须实施IDictionary
中的所有方法,但这应该非常简单。