我想在表单中获取光标点,而不是在屏幕上,我明白我需要使用:
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.
为什么我收到此错误消息? 我可以在线程上运行的方法中使用这些行吗? 如何在几秒钟内调用一个方法在表单线程上运行?
答案 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);
}));
答案 2 :(得分:0)
你需要获取表单并调用invoke()。
喜欢
Point ptCursor = Cursor.Position;
Action action = () => ptCursor = PointToClient(ptCursor);
this.Invoke(action);