void worker_DoWork(object sender, DoWorkEventArgs e)
{
Action act = (Action)(() =>
{
Thread.Sleep(1000);
RRect r = new RRect(rnd.Next(100, 100), rnd.Next(100, 100), GetMousePosition(), PickBrush(), 1080);
this.mainGrid.Children.Add(r);
});
while (true)
{
this.Dispatcher.BeginInvoke(act, DispatcherPriority.Input);
}
}
对于后台工作者,我想每隔一秒向主网格添加一个矩形。我必须使用this.Dispatcher.BeginInvoke因为避免锁定。我的问题是
this.Dispatcher.BeginInvoke(act, DispatcherPriority.Input);
代码块导致大量内存泄漏。怎么了?
编辑1:
删除时
Thread.Sleep(1000);
RRect r = new RRect(rnd.Next(100, 100), rnd.Next(100, 100), GetMousePosition(), PickBrush(), 1080);
this.mainGrid.Children.Add(r);
没有任何改变。
答案 0 :(得分:3)
此代码
while (true)
{
this.Dispatcher.BeginInvoke(act, DispatcherPriority.Input);
}
为调度员排队无限量的工作。 BeginInvoke
将不会等待act
调用完成,它只会将其放入某个内部列表并返回。基本上永远这样做会占用所有可用的内存。
请注意,这不是内存泄漏。它按预期工作,你只是过度使用它。