void BeginMoveMouseCallback(IAsyncResult state)
    {
        BeginMoveMouseDelegate del = (BeginMoveMouseDelegate)state.AsyncState;

        del.EndInvoke(state);
        mre.Reset();
        killMove = false;
        running  = false;
    }
    public void BeginMoveMouse(int x, int y, int rx, int ry)
    {
        if (running)
        {
            throw new Exception("Mouse is already being moved.");
        }
        BeginMoveMouseDelegate del = new BeginMoveMouseDelegate(MoveMouse);

        del.BeginInvoke(x, y, rx, ry, new AsyncCallback(BeginMoveMouseCallback), del);
        running = true;
    }