У меня есть следующий код, который использует класс Observable из System.Reactive. Я использую набор инструментов Silverlight 3, выпущенный в ноябре 2009 года.
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( () => { } );
}
Фрагмент кода приводит к исключению:
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)
Если метод Throttle () отсутствует, код работает нормально. Трассировка стека исключений указывает на доступ к удаленному объекту. Единственный известный мне одноразовый объект - это объект, возвращенный вызовом Subscribe (), но он не был удален.
Может кто-нибудь указать на проблему с этим кодом?