首先,背景,我试图在 System.Timer 触发时进行跨线程更新。由于代码的性质,在计时器上使用 SynchronizatoinContext 不是解决方案。我发现这种模式对于跨线程更新很方便
this.Invoke((MethodInvoker)delegate {
..lots of form update code here...
});
但是,似乎每次调用都会创建新线程,这些线程不会被垃圾收集,从而导致内存/线程泄漏。
我已经在堆栈溢出中搜索答案并发现了相互矛盾的信息。诸如此类的一些线程BeginInvoke Memory Leak? 声称需要 EndInvoke 而其他人声称不需要它。
我的问题是到底发生了什么,我该如何解决?
更新:下面是它如何工作的伪代码
Main Form
System.Timer -> Fires -> Calls UpdateForm() On Secondary Form
Secondary Form
UpdateForm()
{
this.Invoke((MethodInvoker)delegate {
..lots of form update code here for multiple controls..
});
}
该程序正在泄漏内存,我的假设是泄漏是由无限创建线程引起的。