2015-01-11 6 views
0

Мне нужно работать с Threads (первый раз) и заметил, что когда я закрываю форму с помощью ALT + F4, поток продолжает работать. Это, безусловно, не ожидаемые результаты, так как мне нужен этот поток, чтобы остановить работу при выходе. Я в настоящее время:Как выйти из проблем Safely

public void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs E) 
    { 
     Continue = false; 
    } 


    Boolean Continue = true; 

    int MouseX = Cursor.Position.X; 
    int MouseY = Cursor.Position.Y; 
    Point MousePosition; 
    public static void LockMouse() 
    { 
     Form1 Form = new Form1(); 
     while (Form.Continue) 
     { 
      Form.MousePosition.X = 0; 
      Form.MousePosition.Y = 0; 
      Cursor.Position = Form.MousePosition; 
     } 


    } 

и это поток создается с помощью:

public void CreteThread() 
    { 
     Thread Worker = new Thread(LockMouse); 
     Worker.Start(); 
    } 

Я заметил, что поток остается открытым, когда ALT + F4, которая входит в полную блокировку мыши, которая не является предназначена! Кажется, что форма не достигает функции закрытия?

Я хотел бы указать, так как некоторые пользователи могут видеть это как возможный вредоносный код & Downvote соответственно или запросить замыкания по неправильной причине. Это приложение создается и для использования мной & Не будет распространено

+2

объявите свою нить как фоновый, и она будет уничтожена, когда все остальные потоки завершатся: [IsBackground] (http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground (v = vs.110) .aspx) – JPVenson

+0

Я не видел вредоносного кода здесь? – mysticcode

+0

так или иначе ... ничего не связано с вашим первым вопросом ... не используйте цикл while для получения координат ... используйте Eventhandler [MouseMove] (http://msdn.microsoft.com/en-us/library /system.windows.forms.control.mousemove(v=vs.110).aspx), это будет более результативным, и вы избавитесь от своей нити. – JPVenson

ответ

1

Объявите свою нить как фоновый, и она будет уничтожена, когда все остальные нити завершатся: IsBackground.

так или иначе ... ничего не связано с вашим первым вопросом ... не используйте цикл while для получения координат ... используйте Eventhandler MouseMove, это будет более результативным, и вы избавитесь от своей нити.