我有2个帖子:
现在我希望如果事件发生,事件监听器会要求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 });
我不知道为什么,但如果我在辅助线程中,我无法正确获取鼠标的绝对坐标。有人能帮我吗? 如果我有一个线程,它确实有效。