В параллелизме в C # есть «MouseEventArgs», не содержащий определения «GetPosition» - PullRequest
0 голосов
/ 01 февраля 2019

Я читаю книгу Стефана Клири «Параллелизм в 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, противоречащего первому документу.

1 Ответ

0 голосов
/ 01 февраля 2019

System.Windows.Input пространство имен для WPF приложений, поэтому вам следует придерживаться System.Windows.Forms.MouseEventArgs содержит Location свойство, которое содержит координаты мыши относительно элемента управления, вызвавшего событие.Я думаю, что это эквивалентно GetPosition.

...