提问人:Hussain Murtaza 提问时间:7/11/2023 更新时间:7/11/2023 访问量:25
C#如何处理基于数据变化的动态事件?
C# How to handle dynamic events based on Data Change?
问:
所以这是我试图解决的一个场景。
假设我有一个包含字符串、键和整数值的字典。
我希望用户在数据更改时订阅特定密钥。我该怎么做?
我正在考虑这样做。
public class DemoClass : IDisposable
{
public Dictionary<string, int> Values = new Dictionary<string, int>();
public Dictionary<string, EventWrapper> Subs = new Dictionary<string, EventWrapper>();
public DemoClass()
{
Values["A"] = 10;
Subs["A"] = new EventWrapper();
Subs["A"].Handler += Handler;
//Value changed
Values["A"] = 11;
//Call Event
Subs["A"].DoStuff("A");
}
private void Handler(string obj)
{
Console.WriteLine(obj);
}
public void Dispose()
{
foreach (var keyValuePair in Subs)
{
keyValuePair.Value.Handler -= Handler;
}
Subs.Clear();
Values.Clear();
}
}
public class EventWrapper
{
public event Action<string> Handler;
public void DoStuff(string key)
{
Handler?.Invoke(key);
}
}
上面的代码跟踪特定键的所有事件,当项目发生更改时,它将调用所有订阅的用户。 现在这会以一种有效的方式吗?这可行,但有没有更好的方法呢?
更多的上下文是每个订阅者都是一个用户,数据在字典中将是 100K,让我们假设每个用户将订阅字典中的许多项目。
答: 暂无答案
评论
EventWrapper
ObservableDictionary