2013-09-04 2 views
-1

Я не уверен, что это хорошая идея, и это, вероятно, закончится как большая часть академических упражнений, поэтому несите меня:Определить, подключен ли метод обработчика событий к событию?

Предположим, что я создавал UserControl (как и я) который будет каждые X секунд (с использованием таймера) искать текстовый файл и отображать эту информацию в этом UserControl. Давайте назовем этот элемент управления MyUserControl.

перефразировать основной:

Я бы этот таймер в качестве переменной-члена этого управления, и есть код, который выглядит следующим образом:

this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 

И метод обработчик события, который выглядит следующим образом:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Read text-file and do lots of goodness. 
} 

Круто, так что теперь я могу установить общественную собственность MyUserControl к некоторому затраченного времени, и просто шлепаясь этим контролем на моей форме, у меня есть миленькое управление UPDA само по себе. Ухоженная.

Вот вещь, что у меня любопытный:

Формы я собираюсь хлопнуть его на уже есть таймер. Итак, почему есть два конкурирующих таймера? Мне бы очень хотелось, чтобы MyUserControl мог использовать внутренний таймер только в том случае, если это необходимо (например, привязать его к другой форме, которая еще не имеет таймера).

Я предполагаю, что я могу сделать MyUserControl Timer1_Tick общественности, как это здесь:

public void timer1_Tick(object sender, EventArgs e) 
{ 
    // Read text-file and do lots of goodness. 
} 

А потом, потому что эти вещи являются групповыми, сделать что-то подобное здесь в виде:

this.theFormTimer.Tick += new System.EventHandler(this.theFormTimer_Tick); 
this.theFormTimer.Tick += new System.EventHandler(MyUserControlObject.timer1_Tick); 

И также установите переменную-член MyUserControl, чтобы она не включалась сама.

Но есть ли какой-нибудь способ использования этого слова? Могу ли я каким-то образом определить, что метод обработчика событий в MyUserControl уже подключен к событию tick Timer Timer? Или использовать какой-то другой подход, чем то, что я предлагаю?

Спасибо! (извинения, если это окажется дубликат, мой google-fu может быть плохим сегодня)

+2

Нет смысла делать это. –

+1

Вас не интересуют два таймера? Я не был уверен, должен ли я быть. – JustLooking

+1

Во-первых, вам, вероятно, не стоит беспокоиться об этом. Таймер - очень легкий компонент. Во-вторых, что, если период другого таймера составлял 1 секунду. Или 1 час. И ваш компонент хочет обновляться раз в минуту? –

ответ

1

Не обсуждать, следует ли вам это делать или не следует делать, но чтобы ответить на вопрос, я бы сделал это так:

//add a handler 
timer.Tick += timer_tick; 

//... 

//check if timer_tick is wired to Tick 
if (timer.Tick.GetInvocationList().Contains (timer_tick)) 
{ 
    //do something 
} 

Я не проверял, но это то, что я хотел бы попробовать.

+0

FYI, я этого не делаю. Кроме того, я даже задавал этот вопрос: «Я не уверен, что это хорошая идея». Наконец, для меня это было скорее академическим упражнением, чтобы увидеть, что возможно. Во всяком случае ... только для ха-ха я попробую ваше предложение. – JustLooking

+0

FYI. Событие 'System.Windows.Forms.Timer.Tick' может отображаться только в левой части + = или - =. Я дал ему около 10 минут, чтобы попытаться проработать это и перешел к производственному коду! – JustLooking

+0

Спасибо, что попробовали это. Я тоже пробовал, и вы действительно можете вызвать GetActivationList() из класса, в котором определено событие. –

Смежные вопросы