在 C# 的并发中有一个 'MouseEventArgs' 不包含 'GetPosition' 的定义
In Concurrency in C# there is a 'MouseEventArgs' does not contain a definition for 'GetPosition'
我正在阅读 Stephen Cleary 的书 "Concurrency in C# Cookbook",在处理 Rx Recipe 5.2 向上下文发送通知的章节中,有一种情况我们需要进行 CPU 密集型计算每当鼠标移动时。
所以我们有下面的示例代码:
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 的定义,也找不到接受 MouseEventArgs 类型的第一个参数的扩展方法 GetPosition'
我是不是漏掉了什么?
编辑:调查更多我在 Documentation 中看到 MouseEventArgs 确实有 一个 GetPosition 函数,但是这个 MouseEventArgs 是在 System.Windows.Input 命名空间中定义的,而我的代码中有一个 System.Windows.Forms 我想知道这是否是问题所在
EDIT2:进一步调查我发现 different documentation! 其中 MouseEventArgs 没有 GetPosition!
现在我尝试在代码中使用 System.Windows.Input,但是我的 IDE 说这个命名空间没有与第一个文档相矛盾的 MouseEventArgs。
System.Windows.Input
命名空间用于 WPF
应用程序,因此您应该坚持使用 System.Windows.Forms
。 MouseEventArgs
包含 Location
属性 其中包含相对于触发事件的控件的鼠标坐标。我认为它相当于 GetPosition
.
我正在阅读 Stephen Cleary 的书 "Concurrency in C# Cookbook",在处理 Rx Recipe 5.2 向上下文发送通知的章节中,有一种情况我们需要进行 CPU 密集型计算每当鼠标移动时。
所以我们有下面的示例代码:
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 的定义,也找不到接受 MouseEventArgs 类型的第一个参数的扩展方法 GetPosition'
我是不是漏掉了什么?
编辑:调查更多我在 Documentation 中看到 MouseEventArgs 确实有 一个 GetPosition 函数,但是这个 MouseEventArgs 是在 System.Windows.Input 命名空间中定义的,而我的代码中有一个 System.Windows.Forms 我想知道这是否是问题所在
EDIT2:进一步调查我发现 different documentation! 其中 MouseEventArgs 没有 GetPosition!
现在我尝试在代码中使用 System.Windows.Input,但是我的 IDE 说这个命名空间没有与第一个文档相矛盾的 MouseEventArgs。
System.Windows.Input
命名空间用于 WPF
应用程序,因此您应该坚持使用 System.Windows.Forms
。 MouseEventArgs
包含 Location
属性 其中包含相对于触发事件的控件的鼠标坐标。我认为它相当于 GetPosition
.