从辅助线程获取绝对鼠标位置c#

时间:2014-09-23 14:54:11

标签: c# multithreading user-interface invoke

我有2个帖子:

  1. 事件监听器
  2. UI创建者
  3. 现在我希望如果事件发生,事件监听器会要求UI创建者线程更改UI。

    这是我的代码,直到现在:

        public delegate Point MyDelegate_get();
        public MyDelegate_get del_getxy;
    
        public delegate void MyDelegate_set(int x, int y );
        public MyDelegate_set del_setxy;
    
        public Point getXY()
        {
            Point absoluteScreenPos = PointToScreen((Mouse.GetPosition(this)));
            return absoluteScreenPos;
        }
    
        public void setXY(int x,int y )
        {
            SetCursorPos(x, y); 
    
        }
    
    
        public MainWindow()
        {
            InitializeComponent();
             del_getxy = new MyDelegate_get(this.getXY);
             del_setxy = new MyDelegate_set(this.setXY);
        }
    
    
    
    //Ui thread only launch Event listener
    
    /***EVENT LISTENER*/
    
    /*GET MOUSE POSITION*/
    Point absoluteScreenPos =(Point) Dispatcher.Invoke(del_getxy);
    
    /*MANIPULATE IT */
     int x = (int) absoluteScreenPos.X + delta_x;
     int y = (int) absoluteScreenPos.Y + delta_y;
    
     /*CHANGE MOUSE POSITION */
     Dispatcher.Invoke(del_setxy, new Object[] {x,y });
    

    我不知道为什么,但如果我在辅助线程中,我无法正确获取鼠标的绝对坐标。有人能帮我吗? 如果我有一个线程,它确实有效。

0 个答案:

没有答案