簡體   English   中英

如何從C#中的另一個類訪問計時器

[英]How to access a timer from another class in C#

另請參見: 如何從其他線程/類啟用計時器

計時器已分配給表單,我想在其他位置的特定位置啟用它。 我不想公開

這是我用來訪問備忘錄的代碼

    public string TextValue
    {
        set
        {
            if (this.Memo.InvokeRequired)
            {
                this.Invoke((MethodInvoker)delegate
                {
                    this.Memo.Text += value + "\n";
                });
            }
            else
            {
                this.Memo.Text += value + "\n";
            }
        }
    }

    public static void addtxt(string txt)
    {
        var form = Form.ActiveForm as Form1;
        if(form != null)
            form.TextValue = txt;
    }

如果您不想公開計時器本身,請公開可調用以啟用計時器的public方法或屬性。 顯然,啟用計時器的Form將需要引用擁有TimerForm

您想如何啟用計時器? 為了實現它采取了什么行動?

是否可以在要啟用計時器的類中添加事件,並在包含計時器的表單上訂閱該事件? 然后,在該事件的事件處理程序中,可以啟用計時器。

當另一個類引發事件時,事件處理程序將啟用計時器。

public class SomeOtherClassThatDoesStuff
{
   public event EventHandler SomethingHappened;

   public void DoStuff()
   {
      ...
      if( SomethingHappened != null )
         SomethingHappened;
      ...
   }
}

public class Form1
{

    private void Button1_Click(object sender, EventArgs e )
    {

      SomeOtherClassThatDoesStuff o = new SomeOtherClassThatDoesStuff();
      o.SomethingHappened += new EventHandler(EnableTimer);

      o.DoStuff();
    }

    private void EnableTimer(object sender, EventArgs e )
    {
       myTimer.Enabled = true;
    }
}

這樣的事情。 (我沒有測試過,甚至也沒有編譯它,但是我認為您會發現其中的漂移:))。

將計時器設置為“內部”,則程序集中的其他類均可使用它。

您可以添加一個訪問器方法來啟用計時器,這將使yu保持計時器私有,但將方法設為公開,行之有效嗎?

另外,您可以考慮將訪問器設置為protectedinternal ,這取決於誰稱呼它,它可能不需要公開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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