На данный вопрос уже ответили:
Есть класс для инвертирования движения мыши. При вызове метода Stop программа продолжает работать. При применении Abort прога закрывается. Как остановить цикл в методе MouseLoop?
class Inverter
{
private Point currentPosition;
private bool exit;
public void Start()
{
currentPosition = Cursor.Position;
exit = false;
(new Thread(new ThreadStart(MouseLoop))).Start();
}
public void Stop()
{exit = true;}
private void MouseLoop()
{
Thread.CurrentThread.IsBackground = true;
Thread.CurrentThread.Priority = ThreadPriority.Highest;
while (!exit)
{
Point newPosition = Cursor.Position;
int right = currentPosition.X - (newPosition.X - currentPosition.X);
int maxWidth = SystemInformation.VirtualScreen.Width;
if (right >= maxWidth)
{
right -= 3;
}
else if (right <= 0)
{
right += 1;
}
int bottom = currentPosition.Y - (newPosition.Y - currentPosition.Y);
int maxHeight = SystemInformation.VirtualScreen.Height;
if (bottom >= maxHeight)
{
bottom -= 3;
}
else if (bottom <= 0)
{
bottom += 1;
}
Cursor.Position = new Point(right, bottom);
currentPosition = Cursor.Position;
Thread.Sleep(1);
}}}}
Я думаю, что лучше переписать это так. Не знаю, насколько это верно, но я делал так.
class Inverter
{
private Point currentPosition;
private bool exit;
private Thread MouseLoopThread;
public void Start()
{
currentPosition = Cursor.Position;
exit = false;
if (MouseLoopThread == null || MouseLoopThread.ThreadState == ThreadState.Stopped)
{
MouseLoopThread = new Thread(new ThreadStart(MouseLoop));
MouseLoopThread.Priority = ThreadPriority.Highest;
}
if (MouseLoopThread.ThreadState == ThreadState.Unstarted)
MouseLoopThread.Start();
}
public void Stop()
{
exit = true;
MouseLoopThread.Join();
}
private void MouseLoop()
{
while (!exit)
{
Point newPosition = Cursor.Position;
int right = currentPosition.X - (newPosition.X - currentPosition.X);
int maxWidth = SystemInformation.VirtualScreen.Width;
if (right >= maxWidth)
{
right -= 3;
}
else if (right <= 0)
{
right += 1;
}
int bottom = currentPosition.Y - (newPosition.Y - currentPosition.Y);
int maxHeight = SystemInformation.VirtualScreen.Height;
if (bottom >= maxHeight)
{
bottom -= 3;
}
else if (bottom <= 0)
{
bottom += 1;
}
Cursor.Position = new Point(right, bottom);
currentPosition = Cursor.Position;
Thread.Sleep(1);
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем добрый деньПытаюсь отправить AJAX форму на сервер, но метод контроллера, которым должна обрабатываться форма, не вызывается
Мне нужно отслеживать свайп пальцем на "Unity c#"Мне надо чтобы когда игрок делал свайп по экрану, игровая камера двигалась по карте, но не выходила...