RX가 처음인데도 문제를 해결할 수있는 좋은 솔루션을 제공 할 수 있어야한다고 생각합니다. 꽤 많은 검색을 한 후에도 여전히 해결책을 찾지 못했습니다.RX를 사용하여 마우스 이동 이벤트의 빈도를 줄일 수 있습니다.
컨트롤이 일부 마우스 이동 이벤트에 대한 응답으로 작동하는 WPF 응용 프로그램이 있습니다. 이벤트의 빈도를 줄이기 위해 핸들러가 현재보다 덜 자주 호출되도록합니다 (사용자가 마우스를 컨트롤 위로 이동시킬 때). 이상적으로 내가 원하는 것은 관찰자를 설정하고 구독하는 것입니다. 관찰자는 마우스 이동 이벤트를 관찰하고 특정 시간 창 (예 : 0.2 초)이 경과 한 후 최신 이벤트 및 인수를 사용하여 클라이언트 코드를 호출해야합니다. 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에서 발생 유형의 첫 번째 예외를 –
마우스 다운 이벤트 핸들러에서 충돌이 발생했습니다. 마우스 이동시 샘플 호출을 사용할 때만 발생합니다. –
아, 스레딩 문제처럼 보입니다. BeginInvoke를 할 필요가 있습니다 –