WinFormsアプリケーションで実行されている最小化を処理するための2つのバックグラウンドスレッドと1つのスレッドがあります。プログラムが終了するとき、私はこの方法を使用します。
private void MyForm_Closing(object sender, FormClosingEventArgs e)
{
if(labelsUpdaterThread.IsAlive == true)
labelsUpdaterThread.Abort();
if(printNotifyThread.IsAlive == true)
printNotifyThread.Abort();
if(minimizeThread.IsAlive == true)
minimizeThread.Abort();
}
labelsUpdaterThreadとprintNotifyThreadは常に実行されます。ご想像のとおり、MinimizeThreadは、親フォームが最小化されている場合にのみ実行されます。これが私の問題です:
上記のメソッドでthread.abortメソッドが呼び出された場合、MdiParentフォームの右上にある「X」は何もしません。クリックしても効果はありません。
上記のメソッドでthread.abortメソッドが呼び出されていない場合、スレッドはバックグラウンドスレッドであっても、使用できなくなったMdiParent上のリソースにアクセスしようとしているため、MdiParentを閉じると例外がスローされることがあります。
なぜこれが起こっているのかわかりませんが、私にはあまり意味がありません。助けてくれてありがとう!