![](/img/trans.png)
[英]Why does System.Timers.Timer create multiple threads when it fires the Elapsed events?
[英]Does the timer create new object when in the elapsed event?
我有一個 object A,它包含一個事件,是 class B 的基礎 class,它包含一個計時器,如下所示:
public class A
{
public event EventHandler<Status> StatusChanged;
protected void StatusChangedEvent(Status e)
{
StatusChanged?.Invoke(this, e);
}
}
public class B : A
{
private System.Timers.Timer polling = new();
public Beckhoff() : base()
{
pollingTimer.Elapsed += elapsedFunction;
pollingTimer.Interval = 1000;
pollingTimer.Start();
}
private void elapsedFunction(object source, ElapsedEventArgs e)
{
StatusChangedEvent(Status.Connected);
}
}
如果我訂閱事件
objB.StatusChanged += someFuction;
當我嘗試在 elapsedFunction 中啟動基本事件時,我不能,因為它是 null,someFunction 被刪除。 就像經過的事件創建了 B object 的副本,但沒有基本參數。 計時器會這樣做嗎?
在您注冊事件處理程序之前,您的計時器可能已經過時。
嘗試這個:
public class B : A
{
private System.Timers.Timer polling = new System.Timers.Timer();
public B() : base()
{
polling.Elapsed += ElapsedFunction;
polling.Interval = 1000;
}
private void ElapsedFunction(object source, ElapsedEventArgs e)
{
StatusChangedEvent(Status.Connected);
}
public void StartPolling()
{
polling.Start();
}
}
然后,在事件注冊后開始輪詢:
var objB = new B();
objB.StatusChanged += ObjB_StatusChanged;
objB.StartPolling();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.