【C#】 UserControlの終了(DisposeとかUnLoadとか)処理
関連記事
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング 【2023年10月18日(水)】
- 【#CSHARP】次の案件のスケルトン書いてgitサーバに登録するなどと 【2023年05月16日(火)】
NET FRAMEWORKのUserControlには
終了処理に向いた,イベントが用意されてない,っぽい(汗
スレッドの後始末をやろうとして,どん詰まった次第
っちゅうか,いままで,UserControlに終了処理らしきものを書いていたけど,全然終了処理してなかった模様(爆
微妙にリソースリークしまくり(猛汗
結果,米国サイトで見つけた,
OnHandleDestroyed()メソッドをオーバーライドするのが,一番良さそう?
なんのハンドルの破棄時に呼び出されるのかが,イマイチ謎じゃが(爆
なんとなく,ウインドウハンドルの破棄直前?
ってことで,UI系の終了処理とかに用いると,バグる可能性もありそう.
サンプルは載せておきますが,用法用量を守って,ご使用くださいませ♪
いつものように,バグってたら,すまんこってす
//UserControlのOnHandleDestroyed()をオーバーライドしてみる
protected override void OnHandleDestroyed(EventArgs e)
{
Dispose2();
base.OnHandleDestroyed(e);
}
//——————————————
//終了処理
//
//——————————————
private void Dispose2()
{
m_ThreadLoopFL = false; //スレッドに終了指示
for(int i = 0; i < 100; i++) //スレッド終了まで待機
{
if (m_Thread == null) //スレッドハンドルがNULLで全スレッドの破棄処理が完了
{
break;
}
Thread.Sleep(1); //スリープとメッセージポンプ回して,負荷上がり過ぎないように
Application.DoEvents();
}
if (m_DBCtrl != null) //こちらは弊社で作ったデータベースエンジン.コヤツの破棄処理も
{
m_DBCtrl.Dispose();
m_DBCtrl = null;
}
}
[/csharp]
え?VB.NETでも同じ?>リーク
>>康ちゃん@まったり~ さま
もちろん,モノによっては漏れるじぃ
うちなんか,アンマネージなリソース,ガシガシ使うからのぉ.
UserControlのコンストラクタでオープンして,閉じたつもりが閉じてなかったと(笑