타이머를 어떻게 중지합니까?
어리석은 것 같지만 타이머를 멈추기 위해 모든 것을 시도했지만 타이머가 멈추지 않습니다. 나는 게임을하고 있는데 누군가 타이머를 멈추는 방법을 알려줄 수 있으면 감사하겠습니다.
사용 중이라면 이렇게 System.Timers.Timer멈출 수 있습니다
timer.Enabled = false
을 System.Threading.Timer사용하는 경우 이것을 사용하십시오.
timer.Change(Timeout.Infinite , Timeout.Infinite)
또는 사용
timer.Stop();
당신이 사용한다면 System.Windows.Forms.Timer
따라서 이전 답변에 추가하려면 System.Threading.Timer 클래스를 사용하는 경우 동일한 인스턴스를 사용할 더 이상 기회없이 영구적으로 중지됩니다.
timer.Dispose()
그렇지 않으면:
timer.Change(Timeout.Infinite, Timeout.Infinite)
System.Windows.Forms.Timer : timer.Enabled = false;
System.Threading.Timer : timer.Change(Timeout.Infinite, Timeout.Infinite);
System.Timers.Timer : timer.Enabled = false;또는timer.Stop();
.NET 프레임 워크의 각 타이머를 사용하면 중지하기 직전에 타이머가 실행될 수 있으므로 중지 한 후에 콜백이 표시됩니다.
비동기 콜백 컨텍스트 와 같은 것을 사용해야합니다 . 타이머를 실행하려면 boolset을 사용하고 중지 할 때로 true설정 false하십시오. 그런 다음 콜백이 컨텍스트를 확인하여 실제로 실행되어야하는지 여부를 확인하십시오.
System.Windows.Forms.Timer를 사용한다고 가정합니다. 다른 것에 대한 명시적인 언급이 없었기 때문에 ... 그렇다면 ...
System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Stop();
타이머에 따라 다릅니다. 스레딩 네임 스페이스에서 가져온 경우 필요에 따라 폐기하고 다시 생성하거나 타이머 대리자가 재설정 이벤트를 기다리도록합니다 ( msdn 참조 ). System.Timers 네임 스페이스에는 시작 및 중지 메서드가 있습니다.
나는 또한 비슷한 문제에 여러 번 부딪쳤다.
//Timer init.
var _timer = new System.Timers.Timer
{
AutoReset = true,
Enabled = true,
Interval = TimeSpan.FromSeconds(15).TotalMilliseconds //15 seconds interval
};
_timer.Elapsed += DoSomethingOnTimerElapsed;
//To be called on timer elapsed.
private void DoSomethingOnTimerElapsed(object source, ElapsedEventArgs e)
{
//Disable timer.
_timer.Enabled = false; //or _timer.Stop()
try
{
//does long running process
}
catch (Exception ex)
{
}
finally
{
if (_shouldEnableTimer) //set its default value to true.
_timer.Enabled = true; //or _timer.Start()
}
}
//somewhere in the code if you want to stop timer:
_timer.Enabled = _shouldEnableTimer = false;
//At any point, if you want to resume timer add this:
_timer.Enabled = _shouldEnableTimer = true;
그 이유는 무엇입니까?
Lets assume, the code inside the try block takes more time. So, by the time you disable timer (_timer.Enabled = false or _timer.Stop()), there is high possibilty that the code inside try block is still executing. Hence, after completion of the task when it comes to finally, it is again enabled if there is no flag(_shouldEnableTimer) check. Therefore, I prevent your problem by adding an additional flag check.
For more clarity, please go through the code and the added comments. Hope this helps.
참고URL : https://stackoverflow.com/questions/4563704/c-sharp-how-do-you-stop-a-timer
'Program Club' 카테고리의 다른 글
| 프로그래밍 방식으로 GIF 애니메이션 중지 (0) | 2020.11.14 |
|---|---|
| Java에서 구분 기호를 제거하지 않고 일부 구분 기호로 문자열을 분할하는 방법은 무엇입니까? (0) | 2020.11.12 |
| Android ADT 오류, dx.jar이 SDK 폴더에서로드되지 않았습니다. (0) | 2020.11.12 |
| 정적 방법과 비 정적 방법의 차이점은 무엇입니까? (0) | 2020.11.12 |
| 시간 개체에 분 추가 (0) | 2020.11.12 |