1
Supose你有啓動按鈕形式/停止線程(不暫停或中斷,我真的需要停止線程!) 看看這個代碼:C#CF重新啓動一個線程
Constructor()
{
m_TestThread = new Thread(new ThreadStart(ButtonsThread));
m_bStopThread = false;
}
ButtonClick
{
// If the thread is not running, start it
m_TestThread.Start();
// If the thread is running, stop it
m_bStopThread = true;
m_TestThread.Join();
}
ThreadFunction()
{
while(!m_bStopThread)
{
// Do work
}
}
2個問題(記得CF): - 我如何知道線程是否正在運行(我似乎無法訪問m_pThreadState,並且我試過C++ GetThreadExitCode(),它會給出錯誤結果)? - 最重要的問題:如果我已經停止線程,我無法重新啓動它,很可能是因爲m_TestThread.m_fStarted仍然被設置(並且它是私人的,所以我無法訪問它)!因此,m_TestThread.Start()會生成一個異常(StateException)。
用Abort()停止線程並不能解決問題。如果我把我的m_TestThread = null;它的工作原理,但後來我創建了一個內存泄漏。 GC也不會清理,即使我等待了xx秒。
有人有想法嗎?所有幫助高度讚賞! Grtz E
請參閱暫停和恢復字幕:「注意:此API現在已過時。」 – 2010-03-24 17:36:11
THX所有的反饋。不幸的是,CF中不支持ThreadState(http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx)。我會堅持布爾值,但我覺得這是一個非常尷尬的方式來處理(但也許這只是我) – 2010-03-29 07:38:44