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
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()中,它返回错误的值如果只有在有多个线程时才失败,我们需要这些信息来解释为什么。。。