簡體   English   中英

在經過的事件中,計時器是否會創建新的 object?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM