另请参阅: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;
}
答案 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)