Я понятия не имел, как создать это сообщение с хорошим заголовком, поэтому заранее извиняюсь.Вызов метода несколько раз, который использует System.Timers.Timer?
Я использую System.Timers.Timer
следующим способом для паузы в течение определенного времени. По сути, я создаю экземпляр класса только один раз, а затем вызываю следующий метод TestDelay() несколько раз с разными значениями Double.
Проблема с созданием экземпляра ToErase один раз, но при вызове TestDelay()
два раза - это то, что задержка не выполнена. С другой стороны, если я дважды создаю экземпляр класса ToErase и вызываю TestDelay()
один раз за каждый экземпляр, то задержка выполняется. Я предполагаю, что это связано с частной задержкой, которая делится в одном экземпляре.
Мой вопрос, как мне нужно изменить этот класс, чтобы я мог создать экземпляр ToErase только один раз и вызвать TestDelay() несколько раз?
Я считал Thread.Sleep()
, но он полностью поддерживает консольное приложение, включая любые другие экземпляры TestDelay()
, которые могут быть запущены на данный момент.
Вот мой код:
class ToErase
{
private System.Timers.Timer Delay;
private ManualResetEventSlim ev = new ManualResetEventSlim(false);
public void TestDelay(Double ms)
{
Console.Write(".");
ev = new ManualResetEventSlim(false);
//TimeSpan span = DateTimeRun.AddMinutes(Offset).Subtract(now);
Delay = new System.Timers.Timer(ms);
Delay.Enabled = true;
Delay = new System.Timers.Timer(ms);
Delay.Elapsed += Delay_Elapsed;
Delay.Enabled = true;
while (Delay.Enabled)
{
string s = "";
////Wait until time passes
}
Console.WriteLine("Timer completed for QTR");
}
private void Delay_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Delay.Enabled = false;
ev.Set();
}
}
Как этот код _not_ выполняет то же, что и 'Thread.Sleep()'? Метод 'TestDelay()' не возвращается до истечения срока действия вашего таймера, что является тем же самым поведением 'Thread.Sleep()' has. См. Http://stackoverflow.com/help/mcve для получения информации о характеристиках примера кода _good_. –
Поскольку код, который вы опубликовали, не имеет никакого смысла, и никто не может определить, какую проблему вы пытаетесь решить здесь. Представьте, что вы не знаете, о коде, над которым работаете, и поставите себя на место людей, читающих ваш вопрос. Если вы сделаете честную оценку своего вопроса, вы поймете, почему вы прошли голосование. –
Вряд ли кто-то пропустил - проголосовал за вас «просто чтобы сделать точку». Даун-голосования на SO имеет подлинный смысл и практические причины для происходящего; это не просто механизм для людей, чтобы выразить свое мнение (хотя это может быть один побочный эффект). Вы должны позаботиться о том, чтобы не делать предположений о мотивациях других. И, возможно, вы должны потратить свое время более продуктивно; было бы лучше сосредоточиться на улучшении вашего вопроса, чем жаловаться на реакцию сообщества на ваш вопрос. –