2015-01-11 168 views
0

我不得不使用線程(第一次),並注意到當我用ALT + F4關閉窗體時線程繼續運行。這絕對不是預期的結果,因爲我需要此線程停止在退出時運行。我目前有:如何安全地退出線程

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

將您的線程聲明爲Background,並且在所有其他線程結束時它將被銷燬:IsBackground。

無論如何......沒什麼關係到你的第一個問題...不使用while循環來獲取座標...用事件處理的MouseMove這將是更好的性能,你擺脫你的線程。