스레드에서 관리되지 않는 리소스를 사용하는 클래스가 있고 사용하지 않을 때 잠자기 상태가 될 수도 있습니다. 나는 그것을 위해 dispose를 구현하고있다. 아래의 예제 코드를 보아라. (내 앱의 다운 된 버젼이다.) 나는 (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에서이 살인입니다. –
이 기능은 "while (TheThread.IsAlive());" 또는 다른 것? – integra753
제목 앞에 "C# :"등을 붙이지 마십시오. 그것이 바로 태그입니다. –