スレッド内でアンマネージリソースを使用するクラスがありますが、使用していないときにスリープすることもあります。私はそれを処理して実装しています、下記のサンプルコードを参照してください(それは私のアプリのダムダウンバージョンです)。私は追加しました(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();
}
メインクラスにもファイナライザがある場合、これはGCでの殺人です。 –
これは、 "while(TheThread.IsAlive());"または、他の何か? – integra753
タイトルに「C#:」などのプレフィックスを付けないでください。それはタグのためのものです。 –