如何从C#中的另一个类访问一个计时器

时间:2009-04-07 12:19:51

标签: c# winforms timer

另请参阅:How to enable a timer from a different thread/class

计时器已分配到表单,我想在特定位置启用它,但是从另一个类启用它。我不想公开

这是我用来访问备忘录的代码

    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;
    }

4 个答案:

答案 0 :(得分:3)

如果您不想公开计时器本身,请公开您可以调用的public方法或属性以启用计时器。显然启用Timer的Form需要引用拥有Form的{​​{1}}。

答案 1 :(得分:2)

您想如何启用计时器?为实现这一目标采取了哪些行动?

是否可以向要从中启用计时器的类添加事件,并在包含计时器的表单上订阅该事件? 在该事件的事件处理程序中,您可以启用计时器。

当另一个类引发事件时,eventhandler将启用计时器。

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;
    }
}

像这样的东西。 (我没有测试,也没有编译它,但我认为你会抓住漂移:))。

答案 2 :(得分:1)

使计时器“内部”,然后程序集中的其他类可以访问它。

答案 3 :(得分:0)

您可以添加一个访问器方法来启用计时器,这将允许yu将计时器设为私有,但是将该方法公之于众,是否可行?

此外,您可以考虑制作访问者protectedinternal,具体取决于谁调用它,可能不需要公开。