【发布时间】:2021-04-28 00:17:59
【问题描述】:
我已经编写了自己的计时器类,它是Windows Multimedia Timers 的包装器。
我在 .NET 的 System.Timers.Timer 类上建模了我的计时器类。
我很难理解为什么 .NET 的计时器在同步对象上调用 BeginInvoke,而不是 Invoke:
if (this.SynchronizingObject != null && this.SynchronizingObject.InvokeRequired)
{
this.SynchronizingObject.BeginInvoke(intervalElapsed, new object[]{this, elapsedEventArgs};
}
else
{
intervalElapsed(this, elapsedEventArgs);
}
我的理解是 BeginInvoke 最终应该通过调用 EndInvoke 来匹配。找不到EndInvoke。
-
.NET 的做法有什么“错误”吗?为什么
BeginInvoke在这里更可取? -
如果我也在课堂上使用
BeginInvoke,这是否意味着我的课堂的计时器事件可能会在前一个事件完成之前触发(重新进入问题)?这不会破坏(某些)同步到同步对象的目的吗?
【问题讨论】:
标签: c# .net asynchronous events delegates