EventHandler called once without event fired
public class Observable<T>
{
public delegate void ValueChanged(T value);
event ValueChanged Changed;
public T Value { get; private set; }
public Observable(T t)
{
Value = t;
}
/*
public void Set(T value)
{
if (Equals(value, Value))
{
return;
}
Value = value;
Changed?.Invoke(Value);
}
*/
public void Subscribe(ValueChanged action)
{
Changed += action;
}
}
I am currently seeing the issue in the user permission handling of a Xamarin mobile app I am working on
ViewModel reads local storage to get latest saved permission (mobile). It creates the Obervable<Permisson> property passing the saved value in the constructor:
var savedCamera = HistoryService.GetStatus<Permissions.Camera>()
CameraPermissionProperty = new Observable<PermissionStatus>(savedCamera); // <--
Then subscription is made
CameraPermissionProperty.Subscribe(SendPermission<Permissions.Camera>);
The SendPermission<Permissions.Camera> method is triggered once with value set in the Observable despite not having invoked the ValueChanged delegate.
I can't repoduce this in a console app.
What could be the issue, could be related to threading?
I added a number to see which method was called:
// ... Observable
public delegate void ValueChanged(T value, int number); //<--
event ValueChanged Changed;
public void Subscribe(ValueChanged action)
{
Changed += action;
Number = 18;
}
public void SubscribeWithInitialUpdate(ValueChanged action)
{
Changed += action;
Number = 10;
Changed.Invoke(Value, Number);
}
10 is returned even though I am calling the Subscribe method