J'ai le code suivant qui utilise la classe Observable de System.Reactive. J'utilise la boîte à outils Silverlight 3 de novembre 2009.Comment utiliser System.Linq.Observable.Throttle()
private IObservable<Event<EventArgs>> _ob;
private IDisposable _proxy;
...
private void Init()
{
_ob = Observable
.FromEvent<EventArgs>(x_Grid, "LayoutUpdated")
.Throttle(2000); // *** <- The problem
_proxy = _ob.Subscribe(() => { });
}
Les résultats de fragment de code à l'exception:
System.ObjectDisposedException: Cannot access a disposed object.
at System.Threading.TimerBase.ChangeTimer(UInt32 dueTime, UInt32 period)
at System.Threading.Timer.Change(Int32 dueTime, Int32 period)
at System.Linq.Observable.<>c__DisplayClass175`2.<>c__DisplayClass17a.<Generate>b__173(Object _)
at System.Threading._TimerCallback.TimerCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading._TimerCallback.PerformTimerCallback(Object state)
Si la méthode des gaz() n'est pas présent, le code fonctionne très bien. La trace de pile d'exception indique l'accès à un objet éliminé. Le seul objet jetable dont je suis au courant est celui retourné par l'appel Subscribe(): mais cela n'a pas été éliminé.
Quelqu'un peut-il indiquer le problème avec ce code?
Ce code * me semble * juste. Qu'est-ce que 'x_Grid'? Un 'DataGridView'? –
x_Grid est un System.Windows.Controls.Grid, à savoir. un DataGrid Silverlight. Il n'y a pas de problème avec le nom d'événement ou le type d'événement car le code s'exécute correctement sans le Throttle() –
Il y a eu * beaucoup * de changements et de corrections de bugs dans Rx depuis l'année dernière. Si possible, essayez ceci sur SL3 avec la dernière version de Rx. –