2011-05-09 87 views
1

這裏是我的設置:
1)C#應用程序啓動並調用導出的非託管C++ DLL函數
2)DLL函數產生一個線程通過Win32的CreateThread的
3)本新線程是否在while循環中「工作」,檢查退出標誌

當我退出c#應用程序時,線程立即退出。

問題:
1)我能做些什麼來讓我的線程在退出之前清理?

由於很多 - 我是新來的C#世界,但與C++清理在C#應用程序退出非託管C++線程

+0

爲什麼不讓C#應用程序在退出應用程序時設置退出標誌並等待線程句柄? – ildjarn 2011-05-09 01:46:06

+0

也許這就是我所缺少的一切,如何在c#應用程序中捕獲「退出」事件? – user371602 2011-05-09 01:50:17

+0

@ user371602:每個C#應用程序都有一個'Main'入口點,就像C++應用程序具有'main'一樣。作爲一個**天真**的第一步,嘗試將其內容封裝在'try..finally'中,然後等待'finally'中的線程。幾乎肯定有更好的方法,但它取決於應用程序的類型。安慰?的WinForms? WPF? – ildjarn 2011-05-09 01:52:19

回答

2

經歷當你的C#應用​​程序退出:

  1. 設置線程可見的標誌。
  2. 致電WaitForSingleObjectHANDLECreateThread返回。這將使它等待線程退出。
  3. 可以選擇成爲一名好公民,並在線索HANDLE上致電CloseHandle以釋放其資源,但如果該應用即將退出,這並不重要。
  4. 定期檢查你的線程內的這個標誌,看它是否應該退出循環。