Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从次线程c获取鼠标的绝对位置#_C#_Multithreading_User Interface_Invoke - Fatal编程技术网

C# 从次线程c获取鼠标的绝对位置#

C# 从次线程c获取鼠标的绝对位置#,c#,multithreading,user-interface,invoke,C#,Multithreading,User Interface,Invoke,我有两个线程: 事件侦听器 用户界面创建者 现在我想知道,如果发生事件,事件侦听器会要求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; p

我有两个线程:

  • 事件侦听器
  • 用户界面创建者
  • 现在我想知道,如果发生事件,事件侦听器会要求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 });
    
    我不知道为什么,但是如果我在第二个线程中,我不能正确地获得鼠标的绝对坐标。有人能帮我吗?
    如果我只有一个线程,它就可以工作。

    我看不出您在哪里运行辅助线程<代码>调度程序。调用将确保代码在UI线程上运行,而不是在其他线程上运行。我在UI线程中运行辅助线程。在事件侦听器线程中执行/***EVENT listerner*/之后的所有代码。如果您不提供一些可能存在问题的代码,我们如何知道出了什么问题?问题应该在函数public Point getXY()中,它返回错误的值如果只有在有多个线程时才失败,我们需要这些信息来解释为什么。。。