2010-03-22 247 views
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

回答

1

您可以使用Thread.SuspendThread.Resume停止/重新启动线程。您可以使用Thread.ThreadState来检查线程的状态。

+0

请参阅暂停和恢复字幕:“注意:此API现在已过时。” – 2010-03-24 17:36:11

+0

THX所有的反馈。不幸的是,CF中不支持ThreadState(http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx)。我会坚持布尔值,但我觉得这是一个非常尴尬的方式来处理(但也许这只是我) – 2010-03-29 07:38:44