Я с нетерпением жду, чтобы добавить модуль проверки положения мыши в моей программе.Интерфейс пользователя имеет два Textbox
для печати X и Y. Он должен печатать позицию курсора асинхронно.
Я пробовал с BeginInvoke
/ Invoke
, Thread.isBackgroud = true
, BackgroundWorker
, но ни один из них не помог.
Thread / BackgroundWorker продолжает возникать
Ошибка перекрестного потока (как и ожидалось),
и BeginInvoke
/ Invoke
имеет проблемы сasync: поток пользовательского интерфейса продолжает умирать.
Я также пробовал событие mousemove
, это работает, но когда курсор выходит за границу формы, отслеживание положения останавливается.
delegate void MP();
private void tracktoggle() {
MP mp = printMousePosition;
BeginInvoke(mp); // Or Invoke(mp);
}
private void printMousePosition() {
while(true) {
this.Xtext.Text = Mouseposition.X.ToString();
this.Ytext.Text = Mouseposition.Y.ToString();
}
}
этот код покидает поток пользовательского интерфейсав блоке.
private async void tracktoggle() {
Task T = new Task(() => { printMousePosition(); });
await T;
}
private void printMousePosition() {
while(true) {
this.Xtext.Text = Mouseposition.X.ToString();
this.Ytext.Text = Mouseposition.Y.ToString();
}
}
это код с async / await.Не блокирует поток пользовательского интерфейса, но текстовые поля не обновляются.Я думал, что BeginInvoke был асинхронной версией Invoke :( не работает
Хотите асинхронно печатать положение мыши без блокировки потока пользовательского интерфейса.