我是RX新手,但覺得它應該能夠爲我希望解決的任務提供一個很好的解決方案。經過相當多的搜索後,我仍然沒有找到解決方案。使用RX減少鼠標移動事件的頻率
我有一個WPF應用程序,其中一個控件在響應某些鼠標移動事件時做了一些工作。我想要減少事件發生的頻率,以便處理程序被調用的次數比當前情況少(當用戶在控件上移動鼠標時)。理想情況下,我想要設置和訂閱觀察員。觀察者應觀察鼠標移動事件,並在特定時間窗口過去後調用客戶端代碼和最近的事件和參數,例如0.2s。作爲新RX,我第一次取代了我原來的標準事件掛鉤以觀察員如下:
var mouseMove = Observable.FromEventPattern<MouseEventArgs>(myControl, "MouseMove");
mouseMove.Subscribe(args => myControl_MouseMove(args.Sender, args.EventArgs));
這似乎很好地工作。
然後我試圖修改觀察者以獲得我上面描述的行爲。我嘗試使用Throttle()調用和Sample()調用。這些沒有產生我預期的結果(或願望)。事實上,在某些情況下,使用Throttle/TimeSpan調用的特定超載會導致我的應用程序死機,但我仍不明白。
這是什麼,我已經試過一個例子:
var mouseMove = Observable.FromEventPattern<MouseEventArgs>(myControl, "MouseMove").Throttle(TimeSpan.FromSeconds(0.2));
mouseMove.Subscribe(args => myControl_MouseMove(args.Sender, args.EventArgs));
從閱讀,油門,直到出現的頻率低於特定閾值(不完全是我預期)吞下的事件,而我相信樣品每隔一段時間對觀察到的事件進行採樣?我希望客戶代碼在給定的時間間隔內被賦予最近的事件。如果在該時間間隔內沒有記錄任何事件,則不應調用客戶端。
希望有人可以幫助這個RX新手。
噢,我也希望隨時瞭解控件使用期限內(降低頻率)的鼠標移動情況。
最大
它有點工作,但我現在經常看到,殺我的應用程序異常:類型的第一個機會異常「System.InvalidOperationException」發生在System.Reactive.Core.dll –
崩潰發生在鼠標放下事件處理程序中。只有在鼠標移動時使用Sample調用時纔會發生。 –
啊,看起來像是一個線程問題。我需要做BeginInvoke –