좋은 제목으로이 게시물을 만드는 방법을 알지 못해서 미리 사과드립니다.System.Timers.Timer?를 사용하는 여러 번 호출하는 방법?
다음과 같은 방법으로 System.Timers.Timer
을 사용하여 일정 시간 동안 일시 중지합니다. 본질적으로 클래스를 한 번만 인스턴스화하고 다른 Double 값을 사용하여 TestDelay() 메서드를 여러 번 호출합니다.
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();
}
}
이 코드는'Thread.Sleep()'과 어떻게 동일한 일을합니까? 'TestDelay()'메소드는 타이머가 만료 될 때까지 리턴하지 않습니다. 이것은 Thread.Sleep()에있는 것과 같은 행동입니다. _good_ 코드 예제의 특성에 대한 정보는 http://stackoverflow.com/help/mcve를 참조하십시오. –
게시 한 코드가 의미가 없으므로 아무도 실제로 여기에서 해결하려고하는 문제점을 알 수 없습니다. 작업중인 코드에 대해 아는 척하지 말고 질문을 읽는 사람들의 입장을 생각해보십시오. 자신의 질문에 대한 정직한 평가를하면 왜 투표를 잘못했는지 이해하게 될 것입니다. –
"그냥 요점을 확인하는"당신을 다운 투표 한 것은 거의 없습니다. SO에 대한 하급 투표는 실제 의미와 실용적인 이유가 있습니다. 사람들의 의견을 표현할 수있는 메커니즘이 아닙니다 (단 하나의 부작용 일 수 있음). 당신은 다른 사람들의 동기에 대한 가정을하지 않도록주의해야합니다. 어쩌면 당신은 더 생산적으로 시간을 보내야합니다. 귀하의 질문에 대한 지역 사회의 반응에 대해 불평하는 것보다 귀하의 질문 개선에 집중하는 것이 더 낫습니다. –