嗨 我有一個計時器控制我的主窗體上創建一個類的實例,在某些情況下類的方法需要停止計時器。訪問窗體控件從類C#窗體
有沒有辦法將定時器Enabled屬性設置爲false而不通過控制進入方法?
我可以怎麼檢查計時器的mainform上的所有控件,然後禁用它?
嗨 我有一個計時器控制我的主窗體上創建一個類的實例,在某些情況下類的方法需要停止計時器。訪問窗體控件從類C#窗體
有沒有辦法將定時器Enabled屬性設置爲false而不通過控制進入方法?
我可以怎麼檢查計時器的mainform上的所有控件,然後禁用它?
您可以從類中創建一個事件來停止定時器,並在您希望發生此事時將其提升。從外部類(主窗體)啓動類後,您訂閱該事件並停止處理程序中的計時器。
這是怎麼引發事件:
class Class1
{
public event EventHandler StopTimer;
public void SomeMethod()
{
if (StopTimer != null)
StopTimer(this, EventArgs.Empty);
}
}
這就是你必須在主窗體:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Class1 myClass = new Class1();
myClass.StopTimer += new EventHandler(myClass_StopTimer);
timer1.Enabled = true;
timer1.Start();
}
void myClass_StopTimer(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
}
}
我有這個類有一個構造函數,要麼需要一個接口
interface IStopTimer
{
void StopTimer();
}
class MyClass
{
public MyClass(IStopTimer stopTimer)
...
或委託
class MyClass
{
public MyClass(Action stopTimer)
...
或可能計時器的方法來達到同樣的事情。這樣這個類不依賴於Windows窗體,並且不知道你用於定時器的是什麼。
這樣或那樣的方法將需要一個引用(直接或間接)的計時器來停止它。你可以對它抽象層,但它不會很漂亮。
您可以使用類似ThreadPool.QueueUserWorkItem()
而不是定時器來啓動計時器執行的操作嗎?這樣當操作完成後,線程將返回到池中,並且您有一個「即忘即忘」機制。
設計聽起來有點怪怪的 - 這可能是值得向大家解釋了更廣闊的背景你試圖達到什麼樣的目標,並要求提供如何簡化的建議 - 這將是最好的問題在一個單獨的問題 – 2010-11-01 11:47:13