我有一個在線程中使用非託管資源的類,它也可以在不使用時進入休眠狀態。我正在實施處理它,請參閱下面的示例代碼(注意它是我的應用程序的一個愚蠢的版本)。我加了(TheThread.IsAlive());在執行DestroySomeUnmangedResouces()之前,可以將其設置爲true。我不認爲我所做的是正確的,所以如果有人能夠提出更好的模型,我會很感激。以線程處理非託管資源
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
//managed
}
//unmanged
_stopTheThread = true;
startTheThreadEvent.Set();
while(TheThread.IsAlive());
}
disposed = true;
}
private void TheThread()
{
while (!_stopTheThread)
{
if (state == State.Stopped)
{
// wait till a start occurs
startTheThreadEvent.WaitOne();
}
switch (state)
{
case Init:
CreateSomeUnmangedResouces();
break;
case Run:
DoStuffWithUnmangedResouces();
break;
case Stop:
DestroySomeUnmangedResouces();
break;
} // switch
}
// Release unmanaged resources when component is disposed
DestroySomeUnmangedResouces();
}
如果你的主類也有一個Finalizer,這是GC上的謀殺。 – 2012-03-16 15:24:34
這是指使用「while(TheThread.IsAlive());」或者是其他東西? – integra753 2012-03-16 15:28:48
請不要用「C#:」等來標題。這就是標籤的用途。 – 2012-03-16 16:04:48