Проблема с тем, как вы разработали класс Poll, заключается в том, что класс Poll не полностью выполняет свою работу.Вам необходимо, чтобы другие классы знали, как запускать и останавливать опрос, то есть половина реализации опроса находится внутри класса Poll, а половина реализации находится вне класса Poll.Если вы собираетесь создать класс Poll, спрячьте ВСЕ детали реализации от всех остальных.
Вот что я имею в виду.Я бы создал событие в опросе так:
public event EventHandler<ElapsedEventArgs> Elapsed;
В конструкторе опроса добавьте эту строку:
this.pollTimer.Elapsed += pollTimer_elapsed;
и pollTimer_elapsed выглядит так:
private void pollTimer_elapsed(object sender, ElapsedEventArgs e)
{
var han = this.Elapsed;
if (han != null)
han(this, e); // Fire the Elapsed event, passing 'this' Poll as the sender
}
Добавьте новый открытый метод в опросе для запуска таймера:
public void Start()
{
this.pollTimer.Start();
}
Так что теперь ваш метод startPool выглядит следующим образом:
public void startPool(Channel channel)
{
polls.Add(channel, new Poll(question, tempdict));
polls[channel].Elapsed += poll_Elapsed;
polls[channel].Start();
}
static void poll_Elapsed(object sender, ElapsedEventArgs e)
{
//sender is now a Poll object
var poll = sender as Poll;
// Now you can do poll.pollTimer.Stop()
// Or better yet, add a Stop method to the Poll class and call poll.Stop()
}
ИМХО, этот подход немного лучше, потому что опросОбъект скрывает большую часть своей реализации от внешних объектов.С точки зрения startPool, класс Poll проще в использовании, и вам также не нужно ничего знать о таймерах за пределами вашего класса Poll.