首先,后台,我正在尝试在System.Timer触发时进行跨线程更新。由于代码的性质,在计时器上使用SynchronizatoinContext不是解决方案。我发现这种模式对于跨线程更新很方便
this.Invoke((MethodInvoker)delegate {
..lots of form update code here...
});
但是,似乎每次调用都会创建新线程,这些线程不会被垃圾回收而导致内存/线程泄漏。
我搜索堆栈溢出的答案,发现有冲突的信息。某些线程(例如此BeginInvoke Memory Leak?)声称需要EndInvoke,而其他人声称不需要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..
});
}
该程序正在泄漏内存,我的假设是泄漏是由无限创建线程引起的。