为了账号安全,请及时绑定邮箱和手机立即绑定

在C#的并发性中,有一个“MouseEventArgs”不包含“GetPosition”的定义。

在C#的并发性中,有一个“MouseEventArgs”不包含“GetPosition”的定义。

C#
智慧大石 2022-08-20 16:07:23
我正在阅读Stephen Cleary的“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的定义,并且没有扩展方法GetPosition接受MouseEventArgs类型的第一个参数。我在这里错过了什么吗?编辑:调查更多,我在文档中看到MouseEventArgs确实有一个GetPosition函数,但是这个MouseEventArgs是在System.Windows.Input命名空间中定义的,而我的代码中的命名空间是在System.Windows.Forms上,我想知道这是否是问题所在编辑2:进一步调查我发现了一个不同的文档!其中MouseEventArgs没有GetPosition!现在我尝试在代码中使用System.Windows.Input one,但我的IDE说这个命名空间没有与第一个文档相矛盾的MouseEventArgs。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

System.Windows.Input命名空间适用于应用程序,因此您应该坚持使用 。 contains 属性,该属性包含相对于触发事件的控件的鼠标坐标。我认为它等同于.WPFSystem.Windows.FormsMouseEventArgsLocationGetPosition



查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信