0

首先,背景,我试图在 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..
    });
    }

该程序正在泄漏内存,我的假设是泄漏是由无限创建线程引起的。

4

0 回答 0