光标指向表单

时间:2011-12-13 12:18:21

标签: c# winforms multithreading

我想在表单中获取光标点,而不是在屏幕上,我明白我需要使用:

        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 个答案:

答案 0 :(得分:2)

您需要在GUI线程上调度PointToClient操作:

this.Invoke(new Action(() => ptCursor = PointToClient(ptCursor)));

答案 1 :(得分:1)

您需要通过Invoke方法访问您的UI级别。

        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

答案 2 :(得分:0)

你需要获取表单并调用invoke()。

喜欢

 Point ptCursor = Cursor.Position;
 Action action = () => ptCursor  = PointToClient(ptCursor);
 this.Invoke(action);