Я хочу передать переменную в функцию, которая запускается после задержки. Я видел аналогичный вопрос о том, как это сделать (см. Ниже). Я не думаю, что это то, что я хочу, так как каждый раз, когда вызывается method1
, растет число прикрепленных анонимных функций? Что мне нужно сделать, это удалить любую существующую прикрепленную анонимную функцию перед добавлением нового. Но я не думаю, что это возможно. Есть ли способ вызвать метод после задержки, но каждый раз передавать новое значение переменной?Вызвать метод (с аргументом) после задержки
using System.Timers;
myTimer = new Timer();
myTimer.Interval = 3000;
myTimer.AutoReset = false;
public void method1(int var1){
myTimer.Elapsed += delegate { doSomething(var1); };
myTimer.Start();
}
public void doSomething(int arg1){...}
UPDATE
В основном всякий раз, когда method1
запускается, я хочу что-то должно произойти 3 секунд позже, и мне нужно передать в качестве аргумента, который может изменяться каждый раз.
Я не думаю, что могу использовать поле для хранения переменной, потому что method1
может вызываться несколько раз до истечения первого таймера. То есть может быть несколько человек. Например. в один момент времени дия из «DoSomething» откладывание случиться может быть ...
doSomething(3)
doSomething(7)
doSomething(1)
Он используется только в тестбенче и method1
будет выполняться называется не более чем в 50 раз. Я хочу обеспечить, чтобы каждый doSomething(var1)
вызывался один раз, а не каждые 3 секунды. Т.е. каждый раз вызывается doSomething
, вызываемый при вызове method1
.
Это приложение для Windows.
Почему не вы перемещаете свой параметр в поле и используете его как общий ресурс? – Redwan
@ Redwan, не могу этого сделать, я обновляю свой вопрос. – spiderplant0
Какие данные находятся в переменной?Вы хотите каждый раз выполнять одну и ту же логику против разных данных или, возможно, выполнять другую логику? – LeftyCoder