繁体   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