System.Threading.Timer からのコールバックで winforms コントロールで Invoke を呼び出すと、タイマーが破棄されるまでハンドルがリークするようです。これを回避する方法を知っている人はいますか? 毎秒値をポーリングし、それに応じて UI を更新する必要があります。
テストプロジェクトで試してみて、それが実際にリークの原因であることを確認しました。これは単に次のとおりです。
System.Threading.Timer timer;
public Form1()
{
InitializeComponent();
timer = new System.Threading.Timer(new System.Threading.TimerCallback(DoStuff), null, 0, 500);
}
void DoStuff(object o)
{
this.Invoke(new Action(() => this.Text = "hello world"));
}
Windows タスク マネージャーで監視すると、1 秒あたり 2 ハンドルがリークします。