Я читаю книгу Стефана Клири «Параллелизм в C # Cookbook» и в главе, посвященной Rx Recipe 5.2, отправляющей уведомления в контекст, есть случай, когда нам нужно выполнять ресурсоемкие вычисления при каждом движении мыши.
Итак, у нас есть следующий пример кода:
private void button3_Click(object sender, EventArgs e)
{
var uiContext = SynchronizationContext.Current;
Trace.WriteLine("UI Thread is " + Environment.CurrentManagedThreadId);
Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(
handler => (s, a) => handler(s, a),
handler => MouseMove += handler,
handler => MouseMove -= handler)
.Select(evt => evt.EventArgs.GetPosition(this))
.ObserveOn(Scheduler.Default)
.Select(position =>
{
//Complex Calculation
Thread.Sleep(100);
var result = position.X + position.Y;
Trace.WriteLine("Calculated Result " + result + " on thread " +
Environment.CurrentManagedThreadId);
return result;
}
)
.ObserveOn(uiContext)
.Subscribe(x => textBox1.Text = "Result " + x + "on Thread " + Environment.CurrentManagedThreadId
);
}
Однако код не компилируется, потому что: 'MouseEventArgs' не содержит определения GetPosition и не имеет метода расширения GetPosition, принимающего первый аргументтипа MouseEventArgs можно найти '
Я что-то здесь упускаю?
РЕДАКТИРОВАТЬ: Исследуя больше, я вижу в Документации , что MouseEventArgs имеет функцию GetPosition, но этот MouseEventArgs определен в пространстве имен System.Windows.Input, в то время как тотв моем коде на System.Windows.Forms мне интересно, если это проблема
EDIT2: расследование, кроме того, я обнаружил другую документацию! , в которой MouseEventArgs не имеет GetPosition!
Теперь я попытался использовать в коде файл System.Windows.Input, но моя среда IDE говорит, что в этом пространстве имен нет MouseEventArgs, противоречащего первому документу.