我目前正在C#中使用VariableWatcher
類。
我想要做的是在每次將變量更改爲特定值時引發一個事件。
例如:我有一個bool a
,這是錯誤的。我將它傳遞給VariableWatcher類,並將其與應該引發事件的值true
一起傳遞給VariableWatcher類。
我已經提出瞭解決這個問題的方法,但我顯然誤解了關於裝箱/取消裝箱的一些觀點。
在C中存儲對象的引用#
這是我的代碼:
public class ValueWatch
{
public delegate void ValueTriggeredD(string ID, string valuename, object source);
public event ValueTriggeredD ValueTriggered;
Dictionary<string, object[]> LookUp = new Dictionary<string, object[]>(); //Key = ID, Value[0] = PropertyName, Value[1] = ObjTrigger, Value[2] = ObjWatch
Timer ttt;
public void Initialize()
{
ttt = new Timer(new TimerCallback(CB_T), null, 0, 50);
}
void CB_T(object o)
{
if (LookUp.Count > 0)
{
foreach (KeyValuePair<string, object[]> kvp in LookUp)
{
Type tp = kvp.Value[2].GetType();
FieldInfo inf = tp.GetField((string)kvp.Value[0]);
if (inf != null)
{
object curval = inf.GetValue(kvp.Value[2]);
if (curval == kvp.Value[1])
{
if (ValueTriggered != null)
ValueTriggered(kvp.Key, (string)kvp.Value[0], kvp.Value[2]);
}
}
}
}
}
public void StartWatching(string ID, object ListObj, object ValueForTrigger, string PropertyName)
{
if (LookUp.ContainsKey(ID))
System.Diagnostics.Debug.Print("already there");
else
{
LookUp.Add(ID, new object[] { PropertyName, ValueForTrigger, ListObj });
}
}
public void StopWatching(string ID)
{
LookUp.Remove(ID);
}
}
我的問題是:爲什麼存儲在該值的對象[2]而不是當我改變它的變化?
實施例:
bool b = false;
valueWatch.ValueTriggered += new ValueTriggeredD(this.VT);
valueWatch.StartWatching("ID1", this, true, "b");
...
b = true;
...
void VT(string ID, string VN, object Source)
{
//Never triggered
}
你也忘了問你的問題... – Oded 2011-04-17 13:39:10
Ooops,對不起 - 編輯:) – alex 2011-04-17 13:48:08
什麼是重點這個?爲什麼不只是在setter調用某種ValueChanged()方法的時候創建一個屬性? – Kon 2011-04-17 13:53:57