Курсорная точка в форме - PullRequest
       2

Курсорная точка в форме

2 голосов
/ 13 декабря 2011

Я хочу получить курсор в форме, а не на экране, я понимаю, что мне нужно использовать:

        Point ptCursor = Cursor.Position;
        ptCursor = PointToClient(ptCursor);

Проблема в том, что я использовал это в методе, который работает в другом потоке, и это дает мне это сообщение об ошибке:

Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.

почему я получаю это сообщение об ошибке?Могу ли я использовать эти строки в методе, который работает в потоке?Как я могу вызвать метод для запуска в потоке формы в течение нескольких секунд?

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Вам необходимо отправить операцию PointToClient в потоке графического интерфейса:

this.Invoke(new Action(() => ptCursor = PointToClient(ptCursor)));
1 голос
/ 13 декабря 2011

Вам необходимо получить доступ к вашему уровню пользовательского интерфейса методом Invoke.

        Point ptCursor;

        this.Invoke(new Action(() => {
            ptCursor = Cursor.Position;
            ptCursor = PointToClient(ptCursor);
        }));

http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

http://weblogs.asp.net/justin_rogers/pages/126345.aspx

0 голосов
/ 13 декабря 2011

вам нужно получить форму и вызвать invoke ().

как

 Point ptCursor = Cursor.Position;
 Action action = () => ptCursor  = PointToClient(ptCursor);
 this.Invoke(action);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...